// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: bitcoin.proto

package org.bitcoinj.wallet;

public final class Protos {
  private Protos() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public interface PeerAddressOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required bytes ip_address = 1;
    boolean hasIpAddress();
    com.google.protobuf.ByteString getIpAddress();
    
    // required uint32 port = 2;
    boolean hasPort();
    int getPort();
    
    // required uint64 services = 3;
    boolean hasServices();
    long getServices();
  }
  public static final class PeerAddress extends
      com.google.protobuf.GeneratedMessage
      implements PeerAddressOrBuilder {
    // Use PeerAddress.newBuilder() to construct.
    private PeerAddress(Builder builder) {
      super(builder);
    }
    private PeerAddress(boolean noInit) {}
    
    private static final PeerAddress defaultInstance;
    public static PeerAddress getDefaultInstance() {
      return defaultInstance;
    }
    
    public PeerAddress getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_PeerAddress_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_PeerAddress_fieldAccessorTable;
    }
    
    private int bitField0_;
    // required bytes ip_address = 1;
    public static final int IP_ADDRESS_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString ipAddress_;
    public boolean hasIpAddress() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.google.protobuf.ByteString getIpAddress() {
      return ipAddress_;
    }
    
    // required uint32 port = 2;
    public static final int PORT_FIELD_NUMBER = 2;
    private int port_;
    public boolean hasPort() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public int getPort() {
      return port_;
    }
    
    // required uint64 services = 3;
    public static final int SERVICES_FIELD_NUMBER = 3;
    private long services_;
    public boolean hasServices() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public long getServices() {
      return services_;
    }
    
    private void initFields() {
      ipAddress_ = com.google.protobuf.ByteString.EMPTY;
      port_ = 0;
      services_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasIpAddress()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasPort()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasServices()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, ipAddress_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, port_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(3, services_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, ipAddress_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, port_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, services_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.PeerAddress parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.PeerAddress prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.PeerAddressOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_PeerAddress_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_PeerAddress_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.PeerAddress.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        ipAddress_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        port_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        services_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.PeerAddress.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.PeerAddress getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.PeerAddress.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.PeerAddress build() {
        org.bitcoinj.wallet.Protos.PeerAddress result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.PeerAddress buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.PeerAddress result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.PeerAddress buildPartial() {
        org.bitcoinj.wallet.Protos.PeerAddress result = new org.bitcoinj.wallet.Protos.PeerAddress(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.ipAddress_ = ipAddress_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.port_ = port_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.services_ = services_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.PeerAddress) {
          return mergeFrom((org.bitcoinj.wallet.Protos.PeerAddress)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.PeerAddress other) {
        if (other == org.bitcoinj.wallet.Protos.PeerAddress.getDefaultInstance()) return this;
        if (other.hasIpAddress()) {
          setIpAddress(other.getIpAddress());
        }
        if (other.hasPort()) {
          setPort(other.getPort());
        }
        if (other.hasServices()) {
          setServices(other.getServices());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasIpAddress()) {
          
          return false;
        }
        if (!hasPort()) {
          
          return false;
        }
        if (!hasServices()) {
          
          return false;
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              ipAddress_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              port_ = input.readUInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              services_ = input.readUInt64();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required bytes ip_address = 1;
      private com.google.protobuf.ByteString ipAddress_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasIpAddress() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.google.protobuf.ByteString getIpAddress() {
        return ipAddress_;
      }
      public Builder setIpAddress(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        ipAddress_ = value;
        onChanged();
        return this;
      }
      public Builder clearIpAddress() {
        bitField0_ = (bitField0_ & ~0x00000001);
        ipAddress_ = getDefaultInstance().getIpAddress();
        onChanged();
        return this;
      }
      
      // required uint32 port = 2;
      private int port_ ;
      public boolean hasPort() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getPort() {
        return port_;
      }
      public Builder setPort(int value) {
        bitField0_ |= 0x00000002;
        port_ = value;
        onChanged();
        return this;
      }
      public Builder clearPort() {
        bitField0_ = (bitField0_ & ~0x00000002);
        port_ = 0;
        onChanged();
        return this;
      }
      
      // required uint64 services = 3;
      private long services_ ;
      public boolean hasServices() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public long getServices() {
        return services_;
      }
      public Builder setServices(long value) {
        bitField0_ |= 0x00000004;
        services_ = value;
        onChanged();
        return this;
      }
      public Builder clearServices() {
        bitField0_ = (bitField0_ & ~0x00000004);
        services_ = 0L;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.PeerAddress)
    }
    
    static {
      defaultInstance = new PeerAddress(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.PeerAddress)
  }
  
  public interface EncryptedPrivateKeyOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required bytes initialisation_vector = 1;
    boolean hasInitialisationVector();
    com.google.protobuf.ByteString getInitialisationVector();
    
    // required bytes encrypted_private_key = 2;
    boolean hasEncryptedPrivateKey();
    com.google.protobuf.ByteString getEncryptedPrivateKey();
  }
  public static final class EncryptedPrivateKey extends
      com.google.protobuf.GeneratedMessage
      implements EncryptedPrivateKeyOrBuilder {
    // Use EncryptedPrivateKey.newBuilder() to construct.
    private EncryptedPrivateKey(Builder builder) {
      super(builder);
    }
    private EncryptedPrivateKey(boolean noInit) {}
    
    private static final EncryptedPrivateKey defaultInstance;
    public static EncryptedPrivateKey getDefaultInstance() {
      return defaultInstance;
    }
    
    public EncryptedPrivateKey getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_EncryptedPrivateKey_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_EncryptedPrivateKey_fieldAccessorTable;
    }
    
    private int bitField0_;
    // required bytes initialisation_vector = 1;
    public static final int INITIALISATION_VECTOR_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString initialisationVector_;
    public boolean hasInitialisationVector() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.google.protobuf.ByteString getInitialisationVector() {
      return initialisationVector_;
    }
    
    // required bytes encrypted_private_key = 2;
    public static final int ENCRYPTED_PRIVATE_KEY_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString encryptedPrivateKey_;
    public boolean hasEncryptedPrivateKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.google.protobuf.ByteString getEncryptedPrivateKey() {
      return encryptedPrivateKey_;
    }
    
    private void initFields() {
      initialisationVector_ = com.google.protobuf.ByteString.EMPTY;
      encryptedPrivateKey_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasInitialisationVector()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasEncryptedPrivateKey()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, initialisationVector_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, encryptedPrivateKey_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, initialisationVector_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, encryptedPrivateKey_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.EncryptedPrivateKey parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.EncryptedPrivateKey prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.EncryptedPrivateKeyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_EncryptedPrivateKey_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_EncryptedPrivateKey_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.EncryptedPrivateKey.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        initialisationVector_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        encryptedPrivateKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.EncryptedPrivateKey getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.EncryptedPrivateKey build() {
        org.bitcoinj.wallet.Protos.EncryptedPrivateKey result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.EncryptedPrivateKey buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.EncryptedPrivateKey result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.EncryptedPrivateKey buildPartial() {
        org.bitcoinj.wallet.Protos.EncryptedPrivateKey result = new org.bitcoinj.wallet.Protos.EncryptedPrivateKey(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.initialisationVector_ = initialisationVector_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.encryptedPrivateKey_ = encryptedPrivateKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.EncryptedPrivateKey) {
          return mergeFrom((org.bitcoinj.wallet.Protos.EncryptedPrivateKey)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.EncryptedPrivateKey other) {
        if (other == org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDefaultInstance()) return this;
        if (other.hasInitialisationVector()) {
          setInitialisationVector(other.getInitialisationVector());
        }
        if (other.hasEncryptedPrivateKey()) {
          setEncryptedPrivateKey(other.getEncryptedPrivateKey());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasInitialisationVector()) {
          
          return false;
        }
        if (!hasEncryptedPrivateKey()) {
          
          return false;
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              initialisationVector_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              encryptedPrivateKey_ = input.readBytes();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required bytes initialisation_vector = 1;
      private com.google.protobuf.ByteString initialisationVector_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasInitialisationVector() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.google.protobuf.ByteString getInitialisationVector() {
        return initialisationVector_;
      }
      public Builder setInitialisationVector(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        initialisationVector_ = value;
        onChanged();
        return this;
      }
      public Builder clearInitialisationVector() {
        bitField0_ = (bitField0_ & ~0x00000001);
        initialisationVector_ = getDefaultInstance().getInitialisationVector();
        onChanged();
        return this;
      }
      
      // required bytes encrypted_private_key = 2;
      private com.google.protobuf.ByteString encryptedPrivateKey_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasEncryptedPrivateKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.google.protobuf.ByteString getEncryptedPrivateKey() {
        return encryptedPrivateKey_;
      }
      public Builder setEncryptedPrivateKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        encryptedPrivateKey_ = value;
        onChanged();
        return this;
      }
      public Builder clearEncryptedPrivateKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        encryptedPrivateKey_ = getDefaultInstance().getEncryptedPrivateKey();
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.EncryptedPrivateKey)
    }
    
    static {
      defaultInstance = new EncryptedPrivateKey(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.EncryptedPrivateKey)
  }
  
  public interface KeyOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required .wallet.Key.Type type = 1;
    boolean hasType();
    org.bitcoinj.wallet.Protos.Key.Type getType();
    
    // optional bytes private_key = 2;
    boolean hasPrivateKey();
    com.google.protobuf.ByteString getPrivateKey();
    
    // optional .wallet.EncryptedPrivateKey encrypted_private_key = 6;
    boolean hasEncryptedPrivateKey();
    org.bitcoinj.wallet.Protos.EncryptedPrivateKey getEncryptedPrivateKey();
    org.bitcoinj.wallet.Protos.EncryptedPrivateKeyOrBuilder getEncryptedPrivateKeyOrBuilder();
    
    // optional bytes public_key = 3;
    boolean hasPublicKey();
    com.google.protobuf.ByteString getPublicKey();
    
    // optional string label = 4;
    boolean hasLabel();
    String getLabel();
    
    // optional int64 creation_timestamp = 5;
    boolean hasCreationTimestamp();
    long getCreationTimestamp();
  }
  public static final class Key extends
      com.google.protobuf.GeneratedMessage
      implements KeyOrBuilder {
    // Use Key.newBuilder() to construct.
    private Key(Builder builder) {
      super(builder);
    }
    private Key(boolean noInit) {}
    
    private static final Key defaultInstance;
    public static Key getDefaultInstance() {
      return defaultInstance;
    }
    
    public Key getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Key_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Key_fieldAccessorTable;
    }
    
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      ORIGINAL(0, 1),
      ENCRYPTED_SCRYPT_AES(1, 2),
      ;
      
      public static final int ORIGINAL_VALUE = 1;
      public static final int ENCRYPTED_SCRYPT_AES_VALUE = 2;
      
      
      public final int getNumber() { return value; }
      
      public static Type valueOf(int value) {
        switch (value) {
          case 1: return ORIGINAL;
          case 2: return ENCRYPTED_SCRYPT_AES;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.Key.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final Type[] VALUES = {
        ORIGINAL, ENCRYPTED_SCRYPT_AES, 
      };
      
      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:wallet.Key.Type)
    }
    
    private int bitField0_;
    // required .wallet.Key.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private org.bitcoinj.wallet.Protos.Key.Type type_;
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public org.bitcoinj.wallet.Protos.Key.Type getType() {
      return type_;
    }
    
    // optional bytes private_key = 2;
    public static final int PRIVATE_KEY_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString privateKey_;
    public boolean hasPrivateKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.google.protobuf.ByteString getPrivateKey() {
      return privateKey_;
    }
    
    // optional .wallet.EncryptedPrivateKey encrypted_private_key = 6;
    public static final int ENCRYPTED_PRIVATE_KEY_FIELD_NUMBER = 6;
    private org.bitcoinj.wallet.Protos.EncryptedPrivateKey encryptedPrivateKey_;
    public boolean hasEncryptedPrivateKey() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public org.bitcoinj.wallet.Protos.EncryptedPrivateKey getEncryptedPrivateKey() {
      return encryptedPrivateKey_;
    }
    public org.bitcoinj.wallet.Protos.EncryptedPrivateKeyOrBuilder getEncryptedPrivateKeyOrBuilder() {
      return encryptedPrivateKey_;
    }
    
    // optional bytes public_key = 3;
    public static final int PUBLIC_KEY_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString publicKey_;
    public boolean hasPublicKey() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public com.google.protobuf.ByteString getPublicKey() {
      return publicKey_;
    }
    
    // optional string label = 4;
    public static final int LABEL_FIELD_NUMBER = 4;
    private java.lang.Object label_;
    public boolean hasLabel() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public String getLabel() {
      java.lang.Object ref = label_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          label_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getLabelBytes() {
      java.lang.Object ref = label_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        label_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // optional int64 creation_timestamp = 5;
    public static final int CREATION_TIMESTAMP_FIELD_NUMBER = 5;
    private long creationTimestamp_;
    public boolean hasCreationTimestamp() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public long getCreationTimestamp() {
      return creationTimestamp_;
    }
    
    private void initFields() {
      type_ = org.bitcoinj.wallet.Protos.Key.Type.ORIGINAL;
      privateKey_ = com.google.protobuf.ByteString.EMPTY;
      encryptedPrivateKey_ = org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDefaultInstance();
      publicKey_ = com.google.protobuf.ByteString.EMPTY;
      label_ = "";
      creationTimestamp_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasEncryptedPrivateKey()) {
        if (!getEncryptedPrivateKey().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, privateKey_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(3, publicKey_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(4, getLabelBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(5, creationTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(6, encryptedPrivateKey_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, privateKey_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, publicKey_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getLabelBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, creationTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, encryptedPrivateKey_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.Key parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Key parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Key parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Key parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Key parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Key parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Key parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Key parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Key parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Key parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.Key prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.KeyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Key_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Key_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.Key.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEncryptedPrivateKeyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        type_ = org.bitcoinj.wallet.Protos.Key.Type.ORIGINAL;
        bitField0_ = (bitField0_ & ~0x00000001);
        privateKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (encryptedPrivateKeyBuilder_ == null) {
          encryptedPrivateKey_ = org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDefaultInstance();
        } else {
          encryptedPrivateKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        publicKey_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        label_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        creationTimestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.Key.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.Key getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.Key.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.Key build() {
        org.bitcoinj.wallet.Protos.Key result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.Key buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.Key result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.Key buildPartial() {
        org.bitcoinj.wallet.Protos.Key result = new org.bitcoinj.wallet.Protos.Key(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.privateKey_ = privateKey_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (encryptedPrivateKeyBuilder_ == null) {
          result.encryptedPrivateKey_ = encryptedPrivateKey_;
        } else {
          result.encryptedPrivateKey_ = encryptedPrivateKeyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.publicKey_ = publicKey_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.label_ = label_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.creationTimestamp_ = creationTimestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.Key) {
          return mergeFrom((org.bitcoinj.wallet.Protos.Key)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.Key other) {
        if (other == org.bitcoinj.wallet.Protos.Key.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasPrivateKey()) {
          setPrivateKey(other.getPrivateKey());
        }
        if (other.hasEncryptedPrivateKey()) {
          mergeEncryptedPrivateKey(other.getEncryptedPrivateKey());
        }
        if (other.hasPublicKey()) {
          setPublicKey(other.getPublicKey());
        }
        if (other.hasLabel()) {
          setLabel(other.getLabel());
        }
        if (other.hasCreationTimestamp()) {
          setCreationTimestamp(other.getCreationTimestamp());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasType()) {
          
          return false;
        }
        if (hasEncryptedPrivateKey()) {
          if (!getEncryptedPrivateKey().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              org.bitcoinj.wallet.Protos.Key.Type value = org.bitcoinj.wallet.Protos.Key.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              privateKey_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000008;
              publicKey_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000010;
              label_ = input.readBytes();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000020;
              creationTimestamp_ = input.readInt64();
              break;
            }
            case 50: {
              org.bitcoinj.wallet.Protos.EncryptedPrivateKey.Builder subBuilder = org.bitcoinj.wallet.Protos.EncryptedPrivateKey.newBuilder();
              if (hasEncryptedPrivateKey()) {
                subBuilder.mergeFrom(getEncryptedPrivateKey());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setEncryptedPrivateKey(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required .wallet.Key.Type type = 1;
      private org.bitcoinj.wallet.Protos.Key.Type type_ = org.bitcoinj.wallet.Protos.Key.Type.ORIGINAL;
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public org.bitcoinj.wallet.Protos.Key.Type getType() {
        return type_;
      }
      public Builder setType(org.bitcoinj.wallet.Protos.Key.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = org.bitcoinj.wallet.Protos.Key.Type.ORIGINAL;
        onChanged();
        return this;
      }
      
      // optional bytes private_key = 2;
      private com.google.protobuf.ByteString privateKey_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasPrivateKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.google.protobuf.ByteString getPrivateKey() {
        return privateKey_;
      }
      public Builder setPrivateKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        privateKey_ = value;
        onChanged();
        return this;
      }
      public Builder clearPrivateKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        privateKey_ = getDefaultInstance().getPrivateKey();
        onChanged();
        return this;
      }
      
      // optional .wallet.EncryptedPrivateKey encrypted_private_key = 6;
      private org.bitcoinj.wallet.Protos.EncryptedPrivateKey encryptedPrivateKey_ = org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bitcoinj.wallet.Protos.EncryptedPrivateKey, org.bitcoinj.wallet.Protos.EncryptedPrivateKey.Builder, org.bitcoinj.wallet.Protos.EncryptedPrivateKeyOrBuilder> encryptedPrivateKeyBuilder_;
      public boolean hasEncryptedPrivateKey() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public org.bitcoinj.wallet.Protos.EncryptedPrivateKey getEncryptedPrivateKey() {
        if (encryptedPrivateKeyBuilder_ == null) {
          return encryptedPrivateKey_;
        } else {
          return encryptedPrivateKeyBuilder_.getMessage();
        }
      }
      public Builder setEncryptedPrivateKey(org.bitcoinj.wallet.Protos.EncryptedPrivateKey value) {
        if (encryptedPrivateKeyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          encryptedPrivateKey_ = value;
          onChanged();
        } else {
          encryptedPrivateKeyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder setEncryptedPrivateKey(
          org.bitcoinj.wallet.Protos.EncryptedPrivateKey.Builder builderForValue) {
        if (encryptedPrivateKeyBuilder_ == null) {
          encryptedPrivateKey_ = builderForValue.build();
          onChanged();
        } else {
          encryptedPrivateKeyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder mergeEncryptedPrivateKey(org.bitcoinj.wallet.Protos.EncryptedPrivateKey value) {
        if (encryptedPrivateKeyBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              encryptedPrivateKey_ != org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDefaultInstance()) {
            encryptedPrivateKey_ =
              org.bitcoinj.wallet.Protos.EncryptedPrivateKey.newBuilder(encryptedPrivateKey_).mergeFrom(value).buildPartial();
          } else {
            encryptedPrivateKey_ = value;
          }
          onChanged();
        } else {
          encryptedPrivateKeyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder clearEncryptedPrivateKey() {
        if (encryptedPrivateKeyBuilder_ == null) {
          encryptedPrivateKey_ = org.bitcoinj.wallet.Protos.EncryptedPrivateKey.getDefaultInstance();
          onChanged();
        } else {
          encryptedPrivateKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      public org.bitcoinj.wallet.Protos.EncryptedPrivateKey.Builder getEncryptedPrivateKeyBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getEncryptedPrivateKeyFieldBuilder().getBuilder();
      }
      public org.bitcoinj.wallet.Protos.EncryptedPrivateKeyOrBuilder getEncryptedPrivateKeyOrBuilder() {
        if (encryptedPrivateKeyBuilder_ != null) {
          return encryptedPrivateKeyBuilder_.getMessageOrBuilder();
        } else {
          return encryptedPrivateKey_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          org.bitcoinj.wallet.Protos.EncryptedPrivateKey, org.bitcoinj.wallet.Protos.EncryptedPrivateKey.Builder, org.bitcoinj.wallet.Protos.EncryptedPrivateKeyOrBuilder> 
          getEncryptedPrivateKeyFieldBuilder() {
        if (encryptedPrivateKeyBuilder_ == null) {
          encryptedPrivateKeyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bitcoinj.wallet.Protos.EncryptedPrivateKey, org.bitcoinj.wallet.Protos.EncryptedPrivateKey.Builder, org.bitcoinj.wallet.Protos.EncryptedPrivateKeyOrBuilder>(
                  encryptedPrivateKey_,
                  getParentForChildren(),
                  isClean());
          encryptedPrivateKey_ = null;
        }
        return encryptedPrivateKeyBuilder_;
      }
      
      // optional bytes public_key = 3;
      private com.google.protobuf.ByteString publicKey_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasPublicKey() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public com.google.protobuf.ByteString getPublicKey() {
        return publicKey_;
      }
      public Builder setPublicKey(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        publicKey_ = value;
        onChanged();
        return this;
      }
      public Builder clearPublicKey() {
        bitField0_ = (bitField0_ & ~0x00000008);
        publicKey_ = getDefaultInstance().getPublicKey();
        onChanged();
        return this;
      }
      
      // optional string label = 4;
      private java.lang.Object label_ = "";
      public boolean hasLabel() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      public String getLabel() {
        java.lang.Object ref = label_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          label_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setLabel(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        label_ = value;
        onChanged();
        return this;
      }
      public Builder clearLabel() {
        bitField0_ = (bitField0_ & ~0x00000010);
        label_ = getDefaultInstance().getLabel();
        onChanged();
        return this;
      }
      void setLabel(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000010;
        label_ = value;
        onChanged();
      }
      
      // optional int64 creation_timestamp = 5;
      private long creationTimestamp_ ;
      public boolean hasCreationTimestamp() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      public long getCreationTimestamp() {
        return creationTimestamp_;
      }
      public Builder setCreationTimestamp(long value) {
        bitField0_ |= 0x00000020;
        creationTimestamp_ = value;
        onChanged();
        return this;
      }
      public Builder clearCreationTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000020);
        creationTimestamp_ = 0L;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.Key)
    }
    
    static {
      defaultInstance = new Key(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.Key)
  }
  
  public interface TransactionInputOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required bytes transaction_out_point_hash = 1;
    boolean hasTransactionOutPointHash();
    com.google.protobuf.ByteString getTransactionOutPointHash();
    
    // required int32 transaction_out_point_index = 2;
    boolean hasTransactionOutPointIndex();
    int getTransactionOutPointIndex();
    
    // required bytes script_bytes = 3;
    boolean hasScriptBytes();
    com.google.protobuf.ByteString getScriptBytes();
    
    // optional uint32 sequence = 4;
    boolean hasSequence();
    int getSequence();
  }
  public static final class TransactionInput extends
      com.google.protobuf.GeneratedMessage
      implements TransactionInputOrBuilder {
    // Use TransactionInput.newBuilder() to construct.
    private TransactionInput(Builder builder) {
      super(builder);
    }
    private TransactionInput(boolean noInit) {}
    
    private static final TransactionInput defaultInstance;
    public static TransactionInput getDefaultInstance() {
      return defaultInstance;
    }
    
    public TransactionInput getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionInput_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionInput_fieldAccessorTable;
    }
    
    private int bitField0_;
    // required bytes transaction_out_point_hash = 1;
    public static final int TRANSACTION_OUT_POINT_HASH_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString transactionOutPointHash_;
    public boolean hasTransactionOutPointHash() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.google.protobuf.ByteString getTransactionOutPointHash() {
      return transactionOutPointHash_;
    }
    
    // required int32 transaction_out_point_index = 2;
    public static final int TRANSACTION_OUT_POINT_INDEX_FIELD_NUMBER = 2;
    private int transactionOutPointIndex_;
    public boolean hasTransactionOutPointIndex() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public int getTransactionOutPointIndex() {
      return transactionOutPointIndex_;
    }
    
    // required bytes script_bytes = 3;
    public static final int SCRIPT_BYTES_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString scriptBytes_;
    public boolean hasScriptBytes() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.google.protobuf.ByteString getScriptBytes() {
      return scriptBytes_;
    }
    
    // optional uint32 sequence = 4;
    public static final int SEQUENCE_FIELD_NUMBER = 4;
    private int sequence_;
    public boolean hasSequence() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public int getSequence() {
      return sequence_;
    }
    
    private void initFields() {
      transactionOutPointHash_ = com.google.protobuf.ByteString.EMPTY;
      transactionOutPointIndex_ = 0;
      scriptBytes_ = com.google.protobuf.ByteString.EMPTY;
      sequence_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasTransactionOutPointHash()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTransactionOutPointIndex()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasScriptBytes()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, transactionOutPointHash_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, transactionOutPointIndex_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, scriptBytes_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, sequence_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, transactionOutPointHash_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, transactionOutPointIndex_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, scriptBytes_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, sequence_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionInput parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.TransactionInput prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.TransactionInputOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionInput_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionInput_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.TransactionInput.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        transactionOutPointHash_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        transactionOutPointIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        scriptBytes_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        sequence_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.TransactionInput.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.TransactionInput getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.TransactionInput.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.TransactionInput build() {
        org.bitcoinj.wallet.Protos.TransactionInput result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.TransactionInput buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.TransactionInput result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.TransactionInput buildPartial() {
        org.bitcoinj.wallet.Protos.TransactionInput result = new org.bitcoinj.wallet.Protos.TransactionInput(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.transactionOutPointHash_ = transactionOutPointHash_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.transactionOutPointIndex_ = transactionOutPointIndex_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.scriptBytes_ = scriptBytes_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.sequence_ = sequence_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.TransactionInput) {
          return mergeFrom((org.bitcoinj.wallet.Protos.TransactionInput)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.TransactionInput other) {
        if (other == org.bitcoinj.wallet.Protos.TransactionInput.getDefaultInstance()) return this;
        if (other.hasTransactionOutPointHash()) {
          setTransactionOutPointHash(other.getTransactionOutPointHash());
        }
        if (other.hasTransactionOutPointIndex()) {
          setTransactionOutPointIndex(other.getTransactionOutPointIndex());
        }
        if (other.hasScriptBytes()) {
          setScriptBytes(other.getScriptBytes());
        }
        if (other.hasSequence()) {
          setSequence(other.getSequence());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasTransactionOutPointHash()) {
          
          return false;
        }
        if (!hasTransactionOutPointIndex()) {
          
          return false;
        }
        if (!hasScriptBytes()) {
          
          return false;
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              transactionOutPointHash_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              transactionOutPointIndex_ = input.readInt32();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              scriptBytes_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              sequence_ = input.readUInt32();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required bytes transaction_out_point_hash = 1;
      private com.google.protobuf.ByteString transactionOutPointHash_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasTransactionOutPointHash() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.google.protobuf.ByteString getTransactionOutPointHash() {
        return transactionOutPointHash_;
      }
      public Builder setTransactionOutPointHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        transactionOutPointHash_ = value;
        onChanged();
        return this;
      }
      public Builder clearTransactionOutPointHash() {
        bitField0_ = (bitField0_ & ~0x00000001);
        transactionOutPointHash_ = getDefaultInstance().getTransactionOutPointHash();
        onChanged();
        return this;
      }
      
      // required int32 transaction_out_point_index = 2;
      private int transactionOutPointIndex_ ;
      public boolean hasTransactionOutPointIndex() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getTransactionOutPointIndex() {
        return transactionOutPointIndex_;
      }
      public Builder setTransactionOutPointIndex(int value) {
        bitField0_ |= 0x00000002;
        transactionOutPointIndex_ = value;
        onChanged();
        return this;
      }
      public Builder clearTransactionOutPointIndex() {
        bitField0_ = (bitField0_ & ~0x00000002);
        transactionOutPointIndex_ = 0;
        onChanged();
        return this;
      }
      
      // required bytes script_bytes = 3;
      private com.google.protobuf.ByteString scriptBytes_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasScriptBytes() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.google.protobuf.ByteString getScriptBytes() {
        return scriptBytes_;
      }
      public Builder setScriptBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        scriptBytes_ = value;
        onChanged();
        return this;
      }
      public Builder clearScriptBytes() {
        bitField0_ = (bitField0_ & ~0x00000004);
        scriptBytes_ = getDefaultInstance().getScriptBytes();
        onChanged();
        return this;
      }
      
      // optional uint32 sequence = 4;
      private int sequence_ ;
      public boolean hasSequence() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public int getSequence() {
        return sequence_;
      }
      public Builder setSequence(int value) {
        bitField0_ |= 0x00000008;
        sequence_ = value;
        onChanged();
        return this;
      }
      public Builder clearSequence() {
        bitField0_ = (bitField0_ & ~0x00000008);
        sequence_ = 0;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.TransactionInput)
    }
    
    static {
      defaultInstance = new TransactionInput(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.TransactionInput)
  }
  
  public interface TransactionOutputOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required int64 value = 1;
    boolean hasValue();
    long getValue();
    
    // required bytes script_bytes = 2;
    boolean hasScriptBytes();
    com.google.protobuf.ByteString getScriptBytes();
    
    // optional bytes spent_by_transaction_hash = 3;
    boolean hasSpentByTransactionHash();
    com.google.protobuf.ByteString getSpentByTransactionHash();
    
    // optional int32 spent_by_transaction_index = 4;
    boolean hasSpentByTransactionIndex();
    int getSpentByTransactionIndex();
  }
  public static final class TransactionOutput extends
      com.google.protobuf.GeneratedMessage
      implements TransactionOutputOrBuilder {
    // Use TransactionOutput.newBuilder() to construct.
    private TransactionOutput(Builder builder) {
      super(builder);
    }
    private TransactionOutput(boolean noInit) {}
    
    private static final TransactionOutput defaultInstance;
    public static TransactionOutput getDefaultInstance() {
      return defaultInstance;
    }
    
    public TransactionOutput getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionOutput_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionOutput_fieldAccessorTable;
    }
    
    private int bitField0_;
    // required int64 value = 1;
    public static final int VALUE_FIELD_NUMBER = 1;
    private long value_;
    public boolean hasValue() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public long getValue() {
      return value_;
    }
    
    // required bytes script_bytes = 2;
    public static final int SCRIPT_BYTES_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString scriptBytes_;
    public boolean hasScriptBytes() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.google.protobuf.ByteString getScriptBytes() {
      return scriptBytes_;
    }
    
    // optional bytes spent_by_transaction_hash = 3;
    public static final int SPENT_BY_TRANSACTION_HASH_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString spentByTransactionHash_;
    public boolean hasSpentByTransactionHash() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.google.protobuf.ByteString getSpentByTransactionHash() {
      return spentByTransactionHash_;
    }
    
    // optional int32 spent_by_transaction_index = 4;
    public static final int SPENT_BY_TRANSACTION_INDEX_FIELD_NUMBER = 4;
    private int spentByTransactionIndex_;
    public boolean hasSpentByTransactionIndex() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public int getSpentByTransactionIndex() {
      return spentByTransactionIndex_;
    }
    
    private void initFields() {
      value_ = 0L;
      scriptBytes_ = com.google.protobuf.ByteString.EMPTY;
      spentByTransactionHash_ = com.google.protobuf.ByteString.EMPTY;
      spentByTransactionIndex_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasValue()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasScriptBytes()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, value_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, scriptBytes_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, spentByTransactionHash_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, spentByTransactionIndex_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, value_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, scriptBytes_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, spentByTransactionHash_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, spentByTransactionIndex_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionOutput parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.TransactionOutput prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionOutput_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionOutput_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.TransactionOutput.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        value_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        scriptBytes_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        spentByTransactionHash_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        spentByTransactionIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.TransactionOutput.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.TransactionOutput getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.TransactionOutput.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.TransactionOutput build() {
        org.bitcoinj.wallet.Protos.TransactionOutput result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.TransactionOutput buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.TransactionOutput result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.TransactionOutput buildPartial() {
        org.bitcoinj.wallet.Protos.TransactionOutput result = new org.bitcoinj.wallet.Protos.TransactionOutput(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.value_ = value_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.scriptBytes_ = scriptBytes_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.spentByTransactionHash_ = spentByTransactionHash_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.spentByTransactionIndex_ = spentByTransactionIndex_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.TransactionOutput) {
          return mergeFrom((org.bitcoinj.wallet.Protos.TransactionOutput)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.TransactionOutput other) {
        if (other == org.bitcoinj.wallet.Protos.TransactionOutput.getDefaultInstance()) return this;
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        if (other.hasScriptBytes()) {
          setScriptBytes(other.getScriptBytes());
        }
        if (other.hasSpentByTransactionHash()) {
          setSpentByTransactionHash(other.getSpentByTransactionHash());
        }
        if (other.hasSpentByTransactionIndex()) {
          setSpentByTransactionIndex(other.getSpentByTransactionIndex());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasValue()) {
          
          return false;
        }
        if (!hasScriptBytes()) {
          
          return false;
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              value_ = input.readInt64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              scriptBytes_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              spentByTransactionHash_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              spentByTransactionIndex_ = input.readInt32();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required int64 value = 1;
      private long value_ ;
      public boolean hasValue() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public long getValue() {
        return value_;
      }
      public Builder setValue(long value) {
        bitField0_ |= 0x00000001;
        value_ = value;
        onChanged();
        return this;
      }
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = 0L;
        onChanged();
        return this;
      }
      
      // required bytes script_bytes = 2;
      private com.google.protobuf.ByteString scriptBytes_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasScriptBytes() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.google.protobuf.ByteString getScriptBytes() {
        return scriptBytes_;
      }
      public Builder setScriptBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        scriptBytes_ = value;
        onChanged();
        return this;
      }
      public Builder clearScriptBytes() {
        bitField0_ = (bitField0_ & ~0x00000002);
        scriptBytes_ = getDefaultInstance().getScriptBytes();
        onChanged();
        return this;
      }
      
      // optional bytes spent_by_transaction_hash = 3;
      private com.google.protobuf.ByteString spentByTransactionHash_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasSpentByTransactionHash() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.google.protobuf.ByteString getSpentByTransactionHash() {
        return spentByTransactionHash_;
      }
      public Builder setSpentByTransactionHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        spentByTransactionHash_ = value;
        onChanged();
        return this;
      }
      public Builder clearSpentByTransactionHash() {
        bitField0_ = (bitField0_ & ~0x00000004);
        spentByTransactionHash_ = getDefaultInstance().getSpentByTransactionHash();
        onChanged();
        return this;
      }
      
      // optional int32 spent_by_transaction_index = 4;
      private int spentByTransactionIndex_ ;
      public boolean hasSpentByTransactionIndex() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public int getSpentByTransactionIndex() {
        return spentByTransactionIndex_;
      }
      public Builder setSpentByTransactionIndex(int value) {
        bitField0_ |= 0x00000008;
        spentByTransactionIndex_ = value;
        onChanged();
        return this;
      }
      public Builder clearSpentByTransactionIndex() {
        bitField0_ = (bitField0_ & ~0x00000008);
        spentByTransactionIndex_ = 0;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.TransactionOutput)
    }
    
    static {
      defaultInstance = new TransactionOutput(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.TransactionOutput)
  }
  
  public interface TransactionConfidenceOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .wallet.TransactionConfidence.Type type = 1;
    boolean hasType();
    org.bitcoinj.wallet.Protos.TransactionConfidence.Type getType();
    
    // optional int32 appeared_at_height = 2;
    boolean hasAppearedAtHeight();
    int getAppearedAtHeight();
    
    // optional bytes overriding_transaction = 3;
    boolean hasOverridingTransaction();
    com.google.protobuf.ByteString getOverridingTransaction();
    
    // optional int32 depth = 4;
    boolean hasDepth();
    int getDepth();
    
    // optional int64 work_done = 5;
    boolean hasWorkDone();
    long getWorkDone();
    
    // repeated .wallet.PeerAddress broadcast_by = 6;
    java.util.List<org.bitcoinj.wallet.Protos.PeerAddress> 
        getBroadcastByList();
    org.bitcoinj.wallet.Protos.PeerAddress getBroadcastBy(int index);
    int getBroadcastByCount();
    java.util.List<? extends org.bitcoinj.wallet.Protos.PeerAddressOrBuilder> 
        getBroadcastByOrBuilderList();
    org.bitcoinj.wallet.Protos.PeerAddressOrBuilder getBroadcastByOrBuilder(
        int index);
    
    // optional .wallet.TransactionConfidence.Source source = 7;
    boolean hasSource();
    org.bitcoinj.wallet.Protos.TransactionConfidence.Source getSource();
  }
  public static final class TransactionConfidence extends
      com.google.protobuf.GeneratedMessage
      implements TransactionConfidenceOrBuilder {
    // Use TransactionConfidence.newBuilder() to construct.
    private TransactionConfidence(Builder builder) {
      super(builder);
    }
    private TransactionConfidence(boolean noInit) {}
    
    private static final TransactionConfidence defaultInstance;
    public static TransactionConfidence getDefaultInstance() {
      return defaultInstance;
    }
    
    public TransactionConfidence getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_fieldAccessorTable;
    }
    
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      UNKNOWN(0, 0),
      BUILDING(1, 1),
      NOT_SEEN_IN_CHAIN(2, 2),
      NOT_IN_BEST_CHAIN(3, 3),
      DEAD(4, 4),
      ;
      
      public static final int UNKNOWN_VALUE = 0;
      public static final int BUILDING_VALUE = 1;
      public static final int NOT_SEEN_IN_CHAIN_VALUE = 2;
      public static final int NOT_IN_BEST_CHAIN_VALUE = 3;
      public static final int DEAD_VALUE = 4;
      
      
      public final int getNumber() { return value; }
      
      public static Type valueOf(int value) {
        switch (value) {
          case 0: return UNKNOWN;
          case 1: return BUILDING;
          case 2: return NOT_SEEN_IN_CHAIN;
          case 3: return NOT_IN_BEST_CHAIN;
          case 4: return DEAD;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.TransactionConfidence.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final Type[] VALUES = {
        UNKNOWN, BUILDING, NOT_SEEN_IN_CHAIN, NOT_IN_BEST_CHAIN, DEAD, 
      };
      
      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:wallet.TransactionConfidence.Type)
    }
    
    public enum Source
        implements com.google.protobuf.ProtocolMessageEnum {
      SOURCE_UNKNOWN(0, 0),
      SOURCE_NETWORK(1, 1),
      SOURCE_SELF(2, 2),
      ;
      
      public static final int SOURCE_UNKNOWN_VALUE = 0;
      public static final int SOURCE_NETWORK_VALUE = 1;
      public static final int SOURCE_SELF_VALUE = 2;
      
      
      public final int getNumber() { return value; }
      
      public static Source valueOf(int value) {
        switch (value) {
          case 0: return SOURCE_UNKNOWN;
          case 1: return SOURCE_NETWORK;
          case 2: return SOURCE_SELF;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Source>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Source>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Source>() {
              public Source findValueByNumber(int number) {
                return Source.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.TransactionConfidence.getDescriptor().getEnumTypes().get(1);
      }
      
      private static final Source[] VALUES = {
        SOURCE_UNKNOWN, SOURCE_NETWORK, SOURCE_SELF, 
      };
      
      public static Source valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Source(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:wallet.TransactionConfidence.Source)
    }
    
    private int bitField0_;
    // optional .wallet.TransactionConfidence.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private org.bitcoinj.wallet.Protos.TransactionConfidence.Type type_;
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public org.bitcoinj.wallet.Protos.TransactionConfidence.Type getType() {
      return type_;
    }
    
    // optional int32 appeared_at_height = 2;
    public static final int APPEARED_AT_HEIGHT_FIELD_NUMBER = 2;
    private int appearedAtHeight_;
    public boolean hasAppearedAtHeight() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public int getAppearedAtHeight() {
      return appearedAtHeight_;
    }
    
    // optional bytes overriding_transaction = 3;
    public static final int OVERRIDING_TRANSACTION_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString overridingTransaction_;
    public boolean hasOverridingTransaction() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.google.protobuf.ByteString getOverridingTransaction() {
      return overridingTransaction_;
    }
    
    // optional int32 depth = 4;
    public static final int DEPTH_FIELD_NUMBER = 4;
    private int depth_;
    public boolean hasDepth() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public int getDepth() {
      return depth_;
    }
    
    // optional int64 work_done = 5;
    public static final int WORK_DONE_FIELD_NUMBER = 5;
    private long workDone_;
    public boolean hasWorkDone() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public long getWorkDone() {
      return workDone_;
    }
    
    // repeated .wallet.PeerAddress broadcast_by = 6;
    public static final int BROADCAST_BY_FIELD_NUMBER = 6;
    private java.util.List<org.bitcoinj.wallet.Protos.PeerAddress> broadcastBy_;
    public java.util.List<org.bitcoinj.wallet.Protos.PeerAddress> getBroadcastByList() {
      return broadcastBy_;
    }
    public java.util.List<? extends org.bitcoinj.wallet.Protos.PeerAddressOrBuilder> 
        getBroadcastByOrBuilderList() {
      return broadcastBy_;
    }
    public int getBroadcastByCount() {
      return broadcastBy_.size();
    }
    public org.bitcoinj.wallet.Protos.PeerAddress getBroadcastBy(int index) {
      return broadcastBy_.get(index);
    }
    public org.bitcoinj.wallet.Protos.PeerAddressOrBuilder getBroadcastByOrBuilder(
        int index) {
      return broadcastBy_.get(index);
    }
    
    // optional .wallet.TransactionConfidence.Source source = 7;
    public static final int SOURCE_FIELD_NUMBER = 7;
    private org.bitcoinj.wallet.Protos.TransactionConfidence.Source source_;
    public boolean hasSource() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public org.bitcoinj.wallet.Protos.TransactionConfidence.Source getSource() {
      return source_;
    }
    
    private void initFields() {
      type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
      appearedAtHeight_ = 0;
      overridingTransaction_ = com.google.protobuf.ByteString.EMPTY;
      depth_ = 0;
      workDone_ = 0L;
      broadcastBy_ = java.util.Collections.emptyList();
      source_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Source.SOURCE_UNKNOWN;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      for (int i = 0; i < getBroadcastByCount(); i++) {
        if (!getBroadcastBy(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, appearedAtHeight_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, overridingTransaction_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, depth_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, workDone_);
      }
      for (int i = 0; i < broadcastBy_.size(); i++) {
        output.writeMessage(6, broadcastBy_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeEnum(7, source_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, appearedAtHeight_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, overridingTransaction_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, depth_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, workDone_);
      }
      for (int i = 0; i < broadcastBy_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, broadcastBy_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, source_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.TransactionConfidence parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.TransactionConfidence prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_TransactionConfidence_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.TransactionConfidence.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getBroadcastByFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
        bitField0_ = (bitField0_ & ~0x00000001);
        appearedAtHeight_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        overridingTransaction_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        depth_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        workDone_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (broadcastByBuilder_ == null) {
          broadcastBy_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          broadcastByBuilder_.clear();
        }
        source_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Source.SOURCE_UNKNOWN;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.TransactionConfidence.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.TransactionConfidence getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.TransactionConfidence build() {
        org.bitcoinj.wallet.Protos.TransactionConfidence result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.TransactionConfidence buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.TransactionConfidence result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.TransactionConfidence buildPartial() {
        org.bitcoinj.wallet.Protos.TransactionConfidence result = new org.bitcoinj.wallet.Protos.TransactionConfidence(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.appearedAtHeight_ = appearedAtHeight_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.overridingTransaction_ = overridingTransaction_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.depth_ = depth_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.workDone_ = workDone_;
        if (broadcastByBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            broadcastBy_ = java.util.Collections.unmodifiableList(broadcastBy_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.broadcastBy_ = broadcastBy_;
        } else {
          result.broadcastBy_ = broadcastByBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.source_ = source_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.TransactionConfidence) {
          return mergeFrom((org.bitcoinj.wallet.Protos.TransactionConfidence)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.TransactionConfidence other) {
        if (other == org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasAppearedAtHeight()) {
          setAppearedAtHeight(other.getAppearedAtHeight());
        }
        if (other.hasOverridingTransaction()) {
          setOverridingTransaction(other.getOverridingTransaction());
        }
        if (other.hasDepth()) {
          setDepth(other.getDepth());
        }
        if (other.hasWorkDone()) {
          setWorkDone(other.getWorkDone());
        }
        if (broadcastByBuilder_ == null) {
          if (!other.broadcastBy_.isEmpty()) {
            if (broadcastBy_.isEmpty()) {
              broadcastBy_ = other.broadcastBy_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureBroadcastByIsMutable();
              broadcastBy_.addAll(other.broadcastBy_);
            }
            onChanged();
          }
        } else {
          if (!other.broadcastBy_.isEmpty()) {
            if (broadcastByBuilder_.isEmpty()) {
              broadcastByBuilder_.dispose();
              broadcastByBuilder_ = null;
              broadcastBy_ = other.broadcastBy_;
              bitField0_ = (bitField0_ & ~0x00000020);
              broadcastByBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getBroadcastByFieldBuilder() : null;
            } else {
              broadcastByBuilder_.addAllMessages(other.broadcastBy_);
            }
          }
        }
        if (other.hasSource()) {
          setSource(other.getSource());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        for (int i = 0; i < getBroadcastByCount(); i++) {
          if (!getBroadcastBy(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              org.bitcoinj.wallet.Protos.TransactionConfidence.Type value = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              appearedAtHeight_ = input.readInt32();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              overridingTransaction_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              depth_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              workDone_ = input.readInt64();
              break;
            }
            case 50: {
              org.bitcoinj.wallet.Protos.PeerAddress.Builder subBuilder = org.bitcoinj.wallet.Protos.PeerAddress.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBroadcastBy(subBuilder.buildPartial());
              break;
            }
            case 56: {
              int rawValue = input.readEnum();
              org.bitcoinj.wallet.Protos.TransactionConfidence.Source value = org.bitcoinj.wallet.Protos.TransactionConfidence.Source.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(7, rawValue);
              } else {
                bitField0_ |= 0x00000040;
                source_ = value;
              }
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .wallet.TransactionConfidence.Type type = 1;
      private org.bitcoinj.wallet.Protos.TransactionConfidence.Type type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public org.bitcoinj.wallet.Protos.TransactionConfidence.Type getType() {
        return type_;
      }
      public Builder setType(org.bitcoinj.wallet.Protos.TransactionConfidence.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Type.UNKNOWN;
        onChanged();
        return this;
      }
      
      // optional int32 appeared_at_height = 2;
      private int appearedAtHeight_ ;
      public boolean hasAppearedAtHeight() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getAppearedAtHeight() {
        return appearedAtHeight_;
      }
      public Builder setAppearedAtHeight(int value) {
        bitField0_ |= 0x00000002;
        appearedAtHeight_ = value;
        onChanged();
        return this;
      }
      public Builder clearAppearedAtHeight() {
        bitField0_ = (bitField0_ & ~0x00000002);
        appearedAtHeight_ = 0;
        onChanged();
        return this;
      }
      
      // optional bytes overriding_transaction = 3;
      private com.google.protobuf.ByteString overridingTransaction_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasOverridingTransaction() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.google.protobuf.ByteString getOverridingTransaction() {
        return overridingTransaction_;
      }
      public Builder setOverridingTransaction(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        overridingTransaction_ = value;
        onChanged();
        return this;
      }
      public Builder clearOverridingTransaction() {
        bitField0_ = (bitField0_ & ~0x00000004);
        overridingTransaction_ = getDefaultInstance().getOverridingTransaction();
        onChanged();
        return this;
      }
      
      // optional int32 depth = 4;
      private int depth_ ;
      public boolean hasDepth() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public int getDepth() {
        return depth_;
      }
      public Builder setDepth(int value) {
        bitField0_ |= 0x00000008;
        depth_ = value;
        onChanged();
        return this;
      }
      public Builder clearDepth() {
        bitField0_ = (bitField0_ & ~0x00000008);
        depth_ = 0;
        onChanged();
        return this;
      }
      
      // optional int64 work_done = 5;
      private long workDone_ ;
      public boolean hasWorkDone() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      public long getWorkDone() {
        return workDone_;
      }
      public Builder setWorkDone(long value) {
        bitField0_ |= 0x00000010;
        workDone_ = value;
        onChanged();
        return this;
      }
      public Builder clearWorkDone() {
        bitField0_ = (bitField0_ & ~0x00000010);
        workDone_ = 0L;
        onChanged();
        return this;
      }
      
      // repeated .wallet.PeerAddress broadcast_by = 6;
      private java.util.List<org.bitcoinj.wallet.Protos.PeerAddress> broadcastBy_ =
        java.util.Collections.emptyList();
      private void ensureBroadcastByIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          broadcastBy_ = new java.util.ArrayList<org.bitcoinj.wallet.Protos.PeerAddress>(broadcastBy_);
          bitField0_ |= 0x00000020;
         }
      }
      
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.PeerAddress, org.bitcoinj.wallet.Protos.PeerAddress.Builder, org.bitcoinj.wallet.Protos.PeerAddressOrBuilder> broadcastByBuilder_;
      
      public java.util.List<org.bitcoinj.wallet.Protos.PeerAddress> getBroadcastByList() {
        if (broadcastByBuilder_ == null) {
          return java.util.Collections.unmodifiableList(broadcastBy_);
        } else {
          return broadcastByBuilder_.getMessageList();
        }
      }
      public int getBroadcastByCount() {
        if (broadcastByBuilder_ == null) {
          return broadcastBy_.size();
        } else {
          return broadcastByBuilder_.getCount();
        }
      }
      public org.bitcoinj.wallet.Protos.PeerAddress getBroadcastBy(int index) {
        if (broadcastByBuilder_ == null) {
          return broadcastBy_.get(index);
        } else {
          return broadcastByBuilder_.getMessage(index);
        }
      }
      public Builder setBroadcastBy(
          int index, org.bitcoinj.wallet.Protos.PeerAddress value) {
        if (broadcastByBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBroadcastByIsMutable();
          broadcastBy_.set(index, value);
          onChanged();
        } else {
          broadcastByBuilder_.setMessage(index, value);
        }
        return this;
      }
      public Builder setBroadcastBy(
          int index, org.bitcoinj.wallet.Protos.PeerAddress.Builder builderForValue) {
        if (broadcastByBuilder_ == null) {
          ensureBroadcastByIsMutable();
          broadcastBy_.set(index, builderForValue.build());
          onChanged();
        } else {
          broadcastByBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addBroadcastBy(org.bitcoinj.wallet.Protos.PeerAddress value) {
        if (broadcastByBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBroadcastByIsMutable();
          broadcastBy_.add(value);
          onChanged();
        } else {
          broadcastByBuilder_.addMessage(value);
        }
        return this;
      }
      public Builder addBroadcastBy(
          int index, org.bitcoinj.wallet.Protos.PeerAddress value) {
        if (broadcastByBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBroadcastByIsMutable();
          broadcastBy_.add(index, value);
          onChanged();
        } else {
          broadcastByBuilder_.addMessage(index, value);
        }
        return this;
      }
      public Builder addBroadcastBy(
          org.bitcoinj.wallet.Protos.PeerAddress.Builder builderForValue) {
        if (broadcastByBuilder_ == null) {
          ensureBroadcastByIsMutable();
          broadcastBy_.add(builderForValue.build());
          onChanged();
        } else {
          broadcastByBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      public Builder addBroadcastBy(
          int index, org.bitcoinj.wallet.Protos.PeerAddress.Builder builderForValue) {
        if (broadcastByBuilder_ == null) {
          ensureBroadcastByIsMutable();
          broadcastBy_.add(index, builderForValue.build());
          onChanged();
        } else {
          broadcastByBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addAllBroadcastBy(
          java.lang.Iterable<? extends org.bitcoinj.wallet.Protos.PeerAddress> values) {
        if (broadcastByBuilder_ == null) {
          ensureBroadcastByIsMutable();
          super.addAll(values, broadcastBy_);
          onChanged();
        } else {
          broadcastByBuilder_.addAllMessages(values);
        }
        return this;
      }
      public Builder clearBroadcastBy() {
        if (broadcastByBuilder_ == null) {
          broadcastBy_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          broadcastByBuilder_.clear();
        }
        return this;
      }
      public Builder removeBroadcastBy(int index) {
        if (broadcastByBuilder_ == null) {
          ensureBroadcastByIsMutable();
          broadcastBy_.remove(index);
          onChanged();
        } else {
          broadcastByBuilder_.remove(index);
        }
        return this;
      }
      public org.bitcoinj.wallet.Protos.PeerAddress.Builder getBroadcastByBuilder(
          int index) {
        return getBroadcastByFieldBuilder().getBuilder(index);
      }
      public org.bitcoinj.wallet.Protos.PeerAddressOrBuilder getBroadcastByOrBuilder(
          int index) {
        if (broadcastByBuilder_ == null) {
          return broadcastBy_.get(index);  } else {
          return broadcastByBuilder_.getMessageOrBuilder(index);
        }
      }
      public java.util.List<? extends org.bitcoinj.wallet.Protos.PeerAddressOrBuilder> 
           getBroadcastByOrBuilderList() {
        if (broadcastByBuilder_ != null) {
          return broadcastByBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(broadcastBy_);
        }
      }
      public org.bitcoinj.wallet.Protos.PeerAddress.Builder addBroadcastByBuilder() {
        return getBroadcastByFieldBuilder().addBuilder(
            org.bitcoinj.wallet.Protos.PeerAddress.getDefaultInstance());
      }
      public org.bitcoinj.wallet.Protos.PeerAddress.Builder addBroadcastByBuilder(
          int index) {
        return getBroadcastByFieldBuilder().addBuilder(
            index, org.bitcoinj.wallet.Protos.PeerAddress.getDefaultInstance());
      }
      public java.util.List<org.bitcoinj.wallet.Protos.PeerAddress.Builder> 
           getBroadcastByBuilderList() {
        return getBroadcastByFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.PeerAddress, org.bitcoinj.wallet.Protos.PeerAddress.Builder, org.bitcoinj.wallet.Protos.PeerAddressOrBuilder> 
          getBroadcastByFieldBuilder() {
        if (broadcastByBuilder_ == null) {
          broadcastByBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bitcoinj.wallet.Protos.PeerAddress, org.bitcoinj.wallet.Protos.PeerAddress.Builder, org.bitcoinj.wallet.Protos.PeerAddressOrBuilder>(
                  broadcastBy_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          broadcastBy_ = null;
        }
        return broadcastByBuilder_;
      }
      
      // optional .wallet.TransactionConfidence.Source source = 7;
      private org.bitcoinj.wallet.Protos.TransactionConfidence.Source source_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Source.SOURCE_UNKNOWN;
      public boolean hasSource() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      public org.bitcoinj.wallet.Protos.TransactionConfidence.Source getSource() {
        return source_;
      }
      public Builder setSource(org.bitcoinj.wallet.Protos.TransactionConfidence.Source value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000040;
        source_ = value;
        onChanged();
        return this;
      }
      public Builder clearSource() {
        bitField0_ = (bitField0_ & ~0x00000040);
        source_ = org.bitcoinj.wallet.Protos.TransactionConfidence.Source.SOURCE_UNKNOWN;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.TransactionConfidence)
    }
    
    static {
      defaultInstance = new TransactionConfidence(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.TransactionConfidence)
  }
  
  public interface TransactionOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required int32 version = 1;
    boolean hasVersion();
    int getVersion();
    
    // required bytes hash = 2;
    boolean hasHash();
    com.google.protobuf.ByteString getHash();
    
    // optional .wallet.Transaction.Pool pool = 3;
    boolean hasPool();
    org.bitcoinj.wallet.Protos.Transaction.Pool getPool();
    
    // optional uint32 lock_time = 4;
    boolean hasLockTime();
    int getLockTime();
    
    // optional int64 updated_at = 5;
    boolean hasUpdatedAt();
    long getUpdatedAt();
    
    // repeated .wallet.TransactionInput transaction_input = 6;
    java.util.List<org.bitcoinj.wallet.Protos.TransactionInput> 
        getTransactionInputList();
    org.bitcoinj.wallet.Protos.TransactionInput getTransactionInput(int index);
    int getTransactionInputCount();
    java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionInputOrBuilder> 
        getTransactionInputOrBuilderList();
    org.bitcoinj.wallet.Protos.TransactionInputOrBuilder getTransactionInputOrBuilder(
        int index);
    
    // repeated .wallet.TransactionOutput transaction_output = 7;
    java.util.List<org.bitcoinj.wallet.Protos.TransactionOutput> 
        getTransactionOutputList();
    org.bitcoinj.wallet.Protos.TransactionOutput getTransactionOutput(int index);
    int getTransactionOutputCount();
    java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder> 
        getTransactionOutputOrBuilderList();
    org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder getTransactionOutputOrBuilder(
        int index);
    
    // repeated bytes block_hash = 8;
    java.util.List<com.google.protobuf.ByteString> getBlockHashList();
    int getBlockHashCount();
    com.google.protobuf.ByteString getBlockHash(int index);
    
    // optional .wallet.TransactionConfidence confidence = 9;
    boolean hasConfidence();
    org.bitcoinj.wallet.Protos.TransactionConfidence getConfidence();
    org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder getConfidenceOrBuilder();
  }
  public static final class Transaction extends
      com.google.protobuf.GeneratedMessage
      implements TransactionOrBuilder {
    // Use Transaction.newBuilder() to construct.
    private Transaction(Builder builder) {
      super(builder);
    }
    private Transaction(boolean noInit) {}
    
    private static final Transaction defaultInstance;
    public static Transaction getDefaultInstance() {
      return defaultInstance;
    }
    
    public Transaction getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Transaction_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Transaction_fieldAccessorTable;
    }
    
    public enum Pool
        implements com.google.protobuf.ProtocolMessageEnum {
      UNSPENT(0, 4),
      SPENT(1, 5),
      INACTIVE(2, 2),
      DEAD(3, 10),
      PENDING(4, 16),
      PENDING_INACTIVE(5, 18),
      ;
      
      public static final int UNSPENT_VALUE = 4;
      public static final int SPENT_VALUE = 5;
      public static final int INACTIVE_VALUE = 2;
      public static final int DEAD_VALUE = 10;
      public static final int PENDING_VALUE = 16;
      public static final int PENDING_INACTIVE_VALUE = 18;
      
      
      public final int getNumber() { return value; }
      
      public static Pool valueOf(int value) {
        switch (value) {
          case 4: return UNSPENT;
          case 5: return SPENT;
          case 2: return INACTIVE;
          case 10: return DEAD;
          case 16: return PENDING;
          case 18: return PENDING_INACTIVE;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Pool>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Pool>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Pool>() {
              public Pool findValueByNumber(int number) {
                return Pool.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.Transaction.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final Pool[] VALUES = {
        UNSPENT, SPENT, INACTIVE, DEAD, PENDING, PENDING_INACTIVE, 
      };
      
      public static Pool valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Pool(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:wallet.Transaction.Pool)
    }
    
    private int bitField0_;
    // required int32 version = 1;
    public static final int VERSION_FIELD_NUMBER = 1;
    private int version_;
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public int getVersion() {
      return version_;
    }
    
    // required bytes hash = 2;
    public static final int HASH_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString hash_;
    public boolean hasHash() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.google.protobuf.ByteString getHash() {
      return hash_;
    }
    
    // optional .wallet.Transaction.Pool pool = 3;
    public static final int POOL_FIELD_NUMBER = 3;
    private org.bitcoinj.wallet.Protos.Transaction.Pool pool_;
    public boolean hasPool() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public org.bitcoinj.wallet.Protos.Transaction.Pool getPool() {
      return pool_;
    }
    
    // optional uint32 lock_time = 4;
    public static final int LOCK_TIME_FIELD_NUMBER = 4;
    private int lockTime_;
    public boolean hasLockTime() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public int getLockTime() {
      return lockTime_;
    }
    
    // optional int64 updated_at = 5;
    public static final int UPDATED_AT_FIELD_NUMBER = 5;
    private long updatedAt_;
    public boolean hasUpdatedAt() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public long getUpdatedAt() {
      return updatedAt_;
    }
    
    // repeated .wallet.TransactionInput transaction_input = 6;
    public static final int TRANSACTION_INPUT_FIELD_NUMBER = 6;
    private java.util.List<org.bitcoinj.wallet.Protos.TransactionInput> transactionInput_;
    public java.util.List<org.bitcoinj.wallet.Protos.TransactionInput> getTransactionInputList() {
      return transactionInput_;
    }
    public java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionInputOrBuilder> 
        getTransactionInputOrBuilderList() {
      return transactionInput_;
    }
    public int getTransactionInputCount() {
      return transactionInput_.size();
    }
    public org.bitcoinj.wallet.Protos.TransactionInput getTransactionInput(int index) {
      return transactionInput_.get(index);
    }
    public org.bitcoinj.wallet.Protos.TransactionInputOrBuilder getTransactionInputOrBuilder(
        int index) {
      return transactionInput_.get(index);
    }
    
    // repeated .wallet.TransactionOutput transaction_output = 7;
    public static final int TRANSACTION_OUTPUT_FIELD_NUMBER = 7;
    private java.util.List<org.bitcoinj.wallet.Protos.TransactionOutput> transactionOutput_;
    public java.util.List<org.bitcoinj.wallet.Protos.TransactionOutput> getTransactionOutputList() {
      return transactionOutput_;
    }
    public java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder> 
        getTransactionOutputOrBuilderList() {
      return transactionOutput_;
    }
    public int getTransactionOutputCount() {
      return transactionOutput_.size();
    }
    public org.bitcoinj.wallet.Protos.TransactionOutput getTransactionOutput(int index) {
      return transactionOutput_.get(index);
    }
    public org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder getTransactionOutputOrBuilder(
        int index) {
      return transactionOutput_.get(index);
    }
    
    // repeated bytes block_hash = 8;
    public static final int BLOCK_HASH_FIELD_NUMBER = 8;
    private java.util.List<com.google.protobuf.ByteString> blockHash_;
    public java.util.List<com.google.protobuf.ByteString>
        getBlockHashList() {
      return blockHash_;
    }
    public int getBlockHashCount() {
      return blockHash_.size();
    }
    public com.google.protobuf.ByteString getBlockHash(int index) {
      return blockHash_.get(index);
    }
    
    // optional .wallet.TransactionConfidence confidence = 9;
    public static final int CONFIDENCE_FIELD_NUMBER = 9;
    private org.bitcoinj.wallet.Protos.TransactionConfidence confidence_;
    public boolean hasConfidence() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public org.bitcoinj.wallet.Protos.TransactionConfidence getConfidence() {
      return confidence_;
    }
    public org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder getConfidenceOrBuilder() {
      return confidence_;
    }
    
    private void initFields() {
      version_ = 0;
      hash_ = com.google.protobuf.ByteString.EMPTY;
      pool_ = org.bitcoinj.wallet.Protos.Transaction.Pool.UNSPENT;
      lockTime_ = 0;
      updatedAt_ = 0L;
      transactionInput_ = java.util.Collections.emptyList();
      transactionOutput_ = java.util.Collections.emptyList();
      blockHash_ = java.util.Collections.emptyList();;
      confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasVersion()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasHash()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getTransactionInputCount(); i++) {
        if (!getTransactionInput(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getTransactionOutputCount(); i++) {
        if (!getTransactionOutput(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasConfidence()) {
        if (!getConfidence().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, hash_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, pool_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, lockTime_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, updatedAt_);
      }
      for (int i = 0; i < transactionInput_.size(); i++) {
        output.writeMessage(6, transactionInput_.get(i));
      }
      for (int i = 0; i < transactionOutput_.size(); i++) {
        output.writeMessage(7, transactionOutput_.get(i));
      }
      for (int i = 0; i < blockHash_.size(); i++) {
        output.writeBytes(8, blockHash_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(9, confidence_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, hash_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, pool_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, lockTime_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, updatedAt_);
      }
      for (int i = 0; i < transactionInput_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, transactionInput_.get(i));
      }
      for (int i = 0; i < transactionOutput_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, transactionOutput_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < blockHash_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(blockHash_.get(i));
        }
        size += dataSize;
        size += 1 * getBlockHashList().size();
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, confidence_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Transaction parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.Transaction prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.TransactionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Transaction_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Transaction_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.Transaction.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTransactionInputFieldBuilder();
          getTransactionOutputFieldBuilder();
          getConfidenceFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        version_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        hash_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        pool_ = org.bitcoinj.wallet.Protos.Transaction.Pool.UNSPENT;
        bitField0_ = (bitField0_ & ~0x00000004);
        lockTime_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        updatedAt_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (transactionInputBuilder_ == null) {
          transactionInput_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          transactionInputBuilder_.clear();
        }
        if (transactionOutputBuilder_ == null) {
          transactionOutput_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          transactionOutputBuilder_.clear();
        }
        blockHash_ = java.util.Collections.emptyList();;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (confidenceBuilder_ == null) {
          confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
        } else {
          confidenceBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.Transaction.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.Transaction getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.Transaction.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.Transaction build() {
        org.bitcoinj.wallet.Protos.Transaction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.Transaction buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.Transaction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.Transaction buildPartial() {
        org.bitcoinj.wallet.Protos.Transaction result = new org.bitcoinj.wallet.Protos.Transaction(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.hash_ = hash_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.pool_ = pool_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.lockTime_ = lockTime_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.updatedAt_ = updatedAt_;
        if (transactionInputBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            transactionInput_ = java.util.Collections.unmodifiableList(transactionInput_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.transactionInput_ = transactionInput_;
        } else {
          result.transactionInput_ = transactionInputBuilder_.build();
        }
        if (transactionOutputBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            transactionOutput_ = java.util.Collections.unmodifiableList(transactionOutput_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.transactionOutput_ = transactionOutput_;
        } else {
          result.transactionOutput_ = transactionOutputBuilder_.build();
        }
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          blockHash_ = java.util.Collections.unmodifiableList(blockHash_);
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.blockHash_ = blockHash_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000020;
        }
        if (confidenceBuilder_ == null) {
          result.confidence_ = confidence_;
        } else {
          result.confidence_ = confidenceBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.Transaction) {
          return mergeFrom((org.bitcoinj.wallet.Protos.Transaction)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.Transaction other) {
        if (other == org.bitcoinj.wallet.Protos.Transaction.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasHash()) {
          setHash(other.getHash());
        }
        if (other.hasPool()) {
          setPool(other.getPool());
        }
        if (other.hasLockTime()) {
          setLockTime(other.getLockTime());
        }
        if (other.hasUpdatedAt()) {
          setUpdatedAt(other.getUpdatedAt());
        }
        if (transactionInputBuilder_ == null) {
          if (!other.transactionInput_.isEmpty()) {
            if (transactionInput_.isEmpty()) {
              transactionInput_ = other.transactionInput_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureTransactionInputIsMutable();
              transactionInput_.addAll(other.transactionInput_);
            }
            onChanged();
          }
        } else {
          if (!other.transactionInput_.isEmpty()) {
            if (transactionInputBuilder_.isEmpty()) {
              transactionInputBuilder_.dispose();
              transactionInputBuilder_ = null;
              transactionInput_ = other.transactionInput_;
              bitField0_ = (bitField0_ & ~0x00000020);
              transactionInputBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTransactionInputFieldBuilder() : null;
            } else {
              transactionInputBuilder_.addAllMessages(other.transactionInput_);
            }
          }
        }
        if (transactionOutputBuilder_ == null) {
          if (!other.transactionOutput_.isEmpty()) {
            if (transactionOutput_.isEmpty()) {
              transactionOutput_ = other.transactionOutput_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureTransactionOutputIsMutable();
              transactionOutput_.addAll(other.transactionOutput_);
            }
            onChanged();
          }
        } else {
          if (!other.transactionOutput_.isEmpty()) {
            if (transactionOutputBuilder_.isEmpty()) {
              transactionOutputBuilder_.dispose();
              transactionOutputBuilder_ = null;
              transactionOutput_ = other.transactionOutput_;
              bitField0_ = (bitField0_ & ~0x00000040);
              transactionOutputBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTransactionOutputFieldBuilder() : null;
            } else {
              transactionOutputBuilder_.addAllMessages(other.transactionOutput_);
            }
          }
        }
        if (!other.blockHash_.isEmpty()) {
          if (blockHash_.isEmpty()) {
            blockHash_ = other.blockHash_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureBlockHashIsMutable();
            blockHash_.addAll(other.blockHash_);
          }
          onChanged();
        }
        if (other.hasConfidence()) {
          mergeConfidence(other.getConfidence());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasVersion()) {
          
          return false;
        }
        if (!hasHash()) {
          
          return false;
        }
        for (int i = 0; i < getTransactionInputCount(); i++) {
          if (!getTransactionInput(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getTransactionOutputCount(); i++) {
          if (!getTransactionOutput(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasConfidence()) {
          if (!getConfidence().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              version_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              hash_ = input.readBytes();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              org.bitcoinj.wallet.Protos.Transaction.Pool value = org.bitcoinj.wallet.Protos.Transaction.Pool.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                pool_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              lockTime_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              updatedAt_ = input.readInt64();
              break;
            }
            case 50: {
              org.bitcoinj.wallet.Protos.TransactionInput.Builder subBuilder = org.bitcoinj.wallet.Protos.TransactionInput.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addTransactionInput(subBuilder.buildPartial());
              break;
            }
            case 58: {
              org.bitcoinj.wallet.Protos.TransactionOutput.Builder subBuilder = org.bitcoinj.wallet.Protos.TransactionOutput.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addTransactionOutput(subBuilder.buildPartial());
              break;
            }
            case 66: {
              ensureBlockHashIsMutable();
              blockHash_.add(input.readBytes());
              break;
            }
            case 74: {
              org.bitcoinj.wallet.Protos.TransactionConfidence.Builder subBuilder = org.bitcoinj.wallet.Protos.TransactionConfidence.newBuilder();
              if (hasConfidence()) {
                subBuilder.mergeFrom(getConfidence());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setConfidence(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required int32 version = 1;
      private int version_ ;
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getVersion() {
        return version_;
      }
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000001;
        version_ = value;
        onChanged();
        return this;
      }
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = 0;
        onChanged();
        return this;
      }
      
      // required bytes hash = 2;
      private com.google.protobuf.ByteString hash_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasHash() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.google.protobuf.ByteString getHash() {
        return hash_;
      }
      public Builder setHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        hash_ = value;
        onChanged();
        return this;
      }
      public Builder clearHash() {
        bitField0_ = (bitField0_ & ~0x00000002);
        hash_ = getDefaultInstance().getHash();
        onChanged();
        return this;
      }
      
      // optional .wallet.Transaction.Pool pool = 3;
      private org.bitcoinj.wallet.Protos.Transaction.Pool pool_ = org.bitcoinj.wallet.Protos.Transaction.Pool.UNSPENT;
      public boolean hasPool() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public org.bitcoinj.wallet.Protos.Transaction.Pool getPool() {
        return pool_;
      }
      public Builder setPool(org.bitcoinj.wallet.Protos.Transaction.Pool value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        pool_ = value;
        onChanged();
        return this;
      }
      public Builder clearPool() {
        bitField0_ = (bitField0_ & ~0x00000004);
        pool_ = org.bitcoinj.wallet.Protos.Transaction.Pool.UNSPENT;
        onChanged();
        return this;
      }
      
      // optional uint32 lock_time = 4;
      private int lockTime_ ;
      public boolean hasLockTime() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public int getLockTime() {
        return lockTime_;
      }
      public Builder setLockTime(int value) {
        bitField0_ |= 0x00000008;
        lockTime_ = value;
        onChanged();
        return this;
      }
      public Builder clearLockTime() {
        bitField0_ = (bitField0_ & ~0x00000008);
        lockTime_ = 0;
        onChanged();
        return this;
      }
      
      // optional int64 updated_at = 5;
      private long updatedAt_ ;
      public boolean hasUpdatedAt() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      public long getUpdatedAt() {
        return updatedAt_;
      }
      public Builder setUpdatedAt(long value) {
        bitField0_ |= 0x00000010;
        updatedAt_ = value;
        onChanged();
        return this;
      }
      public Builder clearUpdatedAt() {
        bitField0_ = (bitField0_ & ~0x00000010);
        updatedAt_ = 0L;
        onChanged();
        return this;
      }
      
      // repeated .wallet.TransactionInput transaction_input = 6;
      private java.util.List<org.bitcoinj.wallet.Protos.TransactionInput> transactionInput_ =
        java.util.Collections.emptyList();
      private void ensureTransactionInputIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          transactionInput_ = new java.util.ArrayList<org.bitcoinj.wallet.Protos.TransactionInput>(transactionInput_);
          bitField0_ |= 0x00000020;
         }
      }
      
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.TransactionInput, org.bitcoinj.wallet.Protos.TransactionInput.Builder, org.bitcoinj.wallet.Protos.TransactionInputOrBuilder> transactionInputBuilder_;
      
      public java.util.List<org.bitcoinj.wallet.Protos.TransactionInput> getTransactionInputList() {
        if (transactionInputBuilder_ == null) {
          return java.util.Collections.unmodifiableList(transactionInput_);
        } else {
          return transactionInputBuilder_.getMessageList();
        }
      }
      public int getTransactionInputCount() {
        if (transactionInputBuilder_ == null) {
          return transactionInput_.size();
        } else {
          return transactionInputBuilder_.getCount();
        }
      }
      public org.bitcoinj.wallet.Protos.TransactionInput getTransactionInput(int index) {
        if (transactionInputBuilder_ == null) {
          return transactionInput_.get(index);
        } else {
          return transactionInputBuilder_.getMessage(index);
        }
      }
      public Builder setTransactionInput(
          int index, org.bitcoinj.wallet.Protos.TransactionInput value) {
        if (transactionInputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionInputIsMutable();
          transactionInput_.set(index, value);
          onChanged();
        } else {
          transactionInputBuilder_.setMessage(index, value);
        }
        return this;
      }
      public Builder setTransactionInput(
          int index, org.bitcoinj.wallet.Protos.TransactionInput.Builder builderForValue) {
        if (transactionInputBuilder_ == null) {
          ensureTransactionInputIsMutable();
          transactionInput_.set(index, builderForValue.build());
          onChanged();
        } else {
          transactionInputBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addTransactionInput(org.bitcoinj.wallet.Protos.TransactionInput value) {
        if (transactionInputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionInputIsMutable();
          transactionInput_.add(value);
          onChanged();
        } else {
          transactionInputBuilder_.addMessage(value);
        }
        return this;
      }
      public Builder addTransactionInput(
          int index, org.bitcoinj.wallet.Protos.TransactionInput value) {
        if (transactionInputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionInputIsMutable();
          transactionInput_.add(index, value);
          onChanged();
        } else {
          transactionInputBuilder_.addMessage(index, value);
        }
        return this;
      }
      public Builder addTransactionInput(
          org.bitcoinj.wallet.Protos.TransactionInput.Builder builderForValue) {
        if (transactionInputBuilder_ == null) {
          ensureTransactionInputIsMutable();
          transactionInput_.add(builderForValue.build());
          onChanged();
        } else {
          transactionInputBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      public Builder addTransactionInput(
          int index, org.bitcoinj.wallet.Protos.TransactionInput.Builder builderForValue) {
        if (transactionInputBuilder_ == null) {
          ensureTransactionInputIsMutable();
          transactionInput_.add(index, builderForValue.build());
          onChanged();
        } else {
          transactionInputBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addAllTransactionInput(
          java.lang.Iterable<? extends org.bitcoinj.wallet.Protos.TransactionInput> values) {
        if (transactionInputBuilder_ == null) {
          ensureTransactionInputIsMutable();
          super.addAll(values, transactionInput_);
          onChanged();
        } else {
          transactionInputBuilder_.addAllMessages(values);
        }
        return this;
      }
      public Builder clearTransactionInput() {
        if (transactionInputBuilder_ == null) {
          transactionInput_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          transactionInputBuilder_.clear();
        }
        return this;
      }
      public Builder removeTransactionInput(int index) {
        if (transactionInputBuilder_ == null) {
          ensureTransactionInputIsMutable();
          transactionInput_.remove(index);
          onChanged();
        } else {
          transactionInputBuilder_.remove(index);
        }
        return this;
      }
      public org.bitcoinj.wallet.Protos.TransactionInput.Builder getTransactionInputBuilder(
          int index) {
        return getTransactionInputFieldBuilder().getBuilder(index);
      }
      public org.bitcoinj.wallet.Protos.TransactionInputOrBuilder getTransactionInputOrBuilder(
          int index) {
        if (transactionInputBuilder_ == null) {
          return transactionInput_.get(index);  } else {
          return transactionInputBuilder_.getMessageOrBuilder(index);
        }
      }
      public java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionInputOrBuilder> 
           getTransactionInputOrBuilderList() {
        if (transactionInputBuilder_ != null) {
          return transactionInputBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(transactionInput_);
        }
      }
      public org.bitcoinj.wallet.Protos.TransactionInput.Builder addTransactionInputBuilder() {
        return getTransactionInputFieldBuilder().addBuilder(
            org.bitcoinj.wallet.Protos.TransactionInput.getDefaultInstance());
      }
      public org.bitcoinj.wallet.Protos.TransactionInput.Builder addTransactionInputBuilder(
          int index) {
        return getTransactionInputFieldBuilder().addBuilder(
            index, org.bitcoinj.wallet.Protos.TransactionInput.getDefaultInstance());
      }
      public java.util.List<org.bitcoinj.wallet.Protos.TransactionInput.Builder> 
           getTransactionInputBuilderList() {
        return getTransactionInputFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.TransactionInput, org.bitcoinj.wallet.Protos.TransactionInput.Builder, org.bitcoinj.wallet.Protos.TransactionInputOrBuilder> 
          getTransactionInputFieldBuilder() {
        if (transactionInputBuilder_ == null) {
          transactionInputBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bitcoinj.wallet.Protos.TransactionInput, org.bitcoinj.wallet.Protos.TransactionInput.Builder, org.bitcoinj.wallet.Protos.TransactionInputOrBuilder>(
                  transactionInput_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          transactionInput_ = null;
        }
        return transactionInputBuilder_;
      }
      
      // repeated .wallet.TransactionOutput transaction_output = 7;
      private java.util.List<org.bitcoinj.wallet.Protos.TransactionOutput> transactionOutput_ =
        java.util.Collections.emptyList();
      private void ensureTransactionOutputIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          transactionOutput_ = new java.util.ArrayList<org.bitcoinj.wallet.Protos.TransactionOutput>(transactionOutput_);
          bitField0_ |= 0x00000040;
         }
      }
      
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.TransactionOutput, org.bitcoinj.wallet.Protos.TransactionOutput.Builder, org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder> transactionOutputBuilder_;
      
      public java.util.List<org.bitcoinj.wallet.Protos.TransactionOutput> getTransactionOutputList() {
        if (transactionOutputBuilder_ == null) {
          return java.util.Collections.unmodifiableList(transactionOutput_);
        } else {
          return transactionOutputBuilder_.getMessageList();
        }
      }
      public int getTransactionOutputCount() {
        if (transactionOutputBuilder_ == null) {
          return transactionOutput_.size();
        } else {
          return transactionOutputBuilder_.getCount();
        }
      }
      public org.bitcoinj.wallet.Protos.TransactionOutput getTransactionOutput(int index) {
        if (transactionOutputBuilder_ == null) {
          return transactionOutput_.get(index);
        } else {
          return transactionOutputBuilder_.getMessage(index);
        }
      }
      public Builder setTransactionOutput(
          int index, org.bitcoinj.wallet.Protos.TransactionOutput value) {
        if (transactionOutputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionOutputIsMutable();
          transactionOutput_.set(index, value);
          onChanged();
        } else {
          transactionOutputBuilder_.setMessage(index, value);
        }
        return this;
      }
      public Builder setTransactionOutput(
          int index, org.bitcoinj.wallet.Protos.TransactionOutput.Builder builderForValue) {
        if (transactionOutputBuilder_ == null) {
          ensureTransactionOutputIsMutable();
          transactionOutput_.set(index, builderForValue.build());
          onChanged();
        } else {
          transactionOutputBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addTransactionOutput(org.bitcoinj.wallet.Protos.TransactionOutput value) {
        if (transactionOutputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionOutputIsMutable();
          transactionOutput_.add(value);
          onChanged();
        } else {
          transactionOutputBuilder_.addMessage(value);
        }
        return this;
      }
      public Builder addTransactionOutput(
          int index, org.bitcoinj.wallet.Protos.TransactionOutput value) {
        if (transactionOutputBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionOutputIsMutable();
          transactionOutput_.add(index, value);
          onChanged();
        } else {
          transactionOutputBuilder_.addMessage(index, value);
        }
        return this;
      }
      public Builder addTransactionOutput(
          org.bitcoinj.wallet.Protos.TransactionOutput.Builder builderForValue) {
        if (transactionOutputBuilder_ == null) {
          ensureTransactionOutputIsMutable();
          transactionOutput_.add(builderForValue.build());
          onChanged();
        } else {
          transactionOutputBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      public Builder addTransactionOutput(
          int index, org.bitcoinj.wallet.Protos.TransactionOutput.Builder builderForValue) {
        if (transactionOutputBuilder_ == null) {
          ensureTransactionOutputIsMutable();
          transactionOutput_.add(index, builderForValue.build());
          onChanged();
        } else {
          transactionOutputBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addAllTransactionOutput(
          java.lang.Iterable<? extends org.bitcoinj.wallet.Protos.TransactionOutput> values) {
        if (transactionOutputBuilder_ == null) {
          ensureTransactionOutputIsMutable();
          super.addAll(values, transactionOutput_);
          onChanged();
        } else {
          transactionOutputBuilder_.addAllMessages(values);
        }
        return this;
      }
      public Builder clearTransactionOutput() {
        if (transactionOutputBuilder_ == null) {
          transactionOutput_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          transactionOutputBuilder_.clear();
        }
        return this;
      }
      public Builder removeTransactionOutput(int index) {
        if (transactionOutputBuilder_ == null) {
          ensureTransactionOutputIsMutable();
          transactionOutput_.remove(index);
          onChanged();
        } else {
          transactionOutputBuilder_.remove(index);
        }
        return this;
      }
      public org.bitcoinj.wallet.Protos.TransactionOutput.Builder getTransactionOutputBuilder(
          int index) {
        return getTransactionOutputFieldBuilder().getBuilder(index);
      }
      public org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder getTransactionOutputOrBuilder(
          int index) {
        if (transactionOutputBuilder_ == null) {
          return transactionOutput_.get(index);  } else {
          return transactionOutputBuilder_.getMessageOrBuilder(index);
        }
      }
      public java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder> 
           getTransactionOutputOrBuilderList() {
        if (transactionOutputBuilder_ != null) {
          return transactionOutputBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(transactionOutput_);
        }
      }
      public org.bitcoinj.wallet.Protos.TransactionOutput.Builder addTransactionOutputBuilder() {
        return getTransactionOutputFieldBuilder().addBuilder(
            org.bitcoinj.wallet.Protos.TransactionOutput.getDefaultInstance());
      }
      public org.bitcoinj.wallet.Protos.TransactionOutput.Builder addTransactionOutputBuilder(
          int index) {
        return getTransactionOutputFieldBuilder().addBuilder(
            index, org.bitcoinj.wallet.Protos.TransactionOutput.getDefaultInstance());
      }
      public java.util.List<org.bitcoinj.wallet.Protos.TransactionOutput.Builder> 
           getTransactionOutputBuilderList() {
        return getTransactionOutputFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.TransactionOutput, org.bitcoinj.wallet.Protos.TransactionOutput.Builder, org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder> 
          getTransactionOutputFieldBuilder() {
        if (transactionOutputBuilder_ == null) {
          transactionOutputBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bitcoinj.wallet.Protos.TransactionOutput, org.bitcoinj.wallet.Protos.TransactionOutput.Builder, org.bitcoinj.wallet.Protos.TransactionOutputOrBuilder>(
                  transactionOutput_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          transactionOutput_ = null;
        }
        return transactionOutputBuilder_;
      }
      
      // repeated bytes block_hash = 8;
      private java.util.List<com.google.protobuf.ByteString> blockHash_ = java.util.Collections.emptyList();;
      private void ensureBlockHashIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          blockHash_ = new java.util.ArrayList<com.google.protobuf.ByteString>(blockHash_);
          bitField0_ |= 0x00000080;
         }
      }
      public java.util.List<com.google.protobuf.ByteString>
          getBlockHashList() {
        return java.util.Collections.unmodifiableList(blockHash_);
      }
      public int getBlockHashCount() {
        return blockHash_.size();
      }
      public com.google.protobuf.ByteString getBlockHash(int index) {
        return blockHash_.get(index);
      }
      public Builder setBlockHash(
          int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureBlockHashIsMutable();
        blockHash_.set(index, value);
        onChanged();
        return this;
      }
      public Builder addBlockHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureBlockHashIsMutable();
        blockHash_.add(value);
        onChanged();
        return this;
      }
      public Builder addAllBlockHash(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        ensureBlockHashIsMutable();
        super.addAll(values, blockHash_);
        onChanged();
        return this;
      }
      public Builder clearBlockHash() {
        blockHash_ = java.util.Collections.emptyList();;
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      
      // optional .wallet.TransactionConfidence confidence = 9;
      private org.bitcoinj.wallet.Protos.TransactionConfidence confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bitcoinj.wallet.Protos.TransactionConfidence, org.bitcoinj.wallet.Protos.TransactionConfidence.Builder, org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder> confidenceBuilder_;
      public boolean hasConfidence() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      public org.bitcoinj.wallet.Protos.TransactionConfidence getConfidence() {
        if (confidenceBuilder_ == null) {
          return confidence_;
        } else {
          return confidenceBuilder_.getMessage();
        }
      }
      public Builder setConfidence(org.bitcoinj.wallet.Protos.TransactionConfidence value) {
        if (confidenceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          confidence_ = value;
          onChanged();
        } else {
          confidenceBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      public Builder setConfidence(
          org.bitcoinj.wallet.Protos.TransactionConfidence.Builder builderForValue) {
        if (confidenceBuilder_ == null) {
          confidence_ = builderForValue.build();
          onChanged();
        } else {
          confidenceBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      public Builder mergeConfidence(org.bitcoinj.wallet.Protos.TransactionConfidence value) {
        if (confidenceBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              confidence_ != org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance()) {
            confidence_ =
              org.bitcoinj.wallet.Protos.TransactionConfidence.newBuilder(confidence_).mergeFrom(value).buildPartial();
          } else {
            confidence_ = value;
          }
          onChanged();
        } else {
          confidenceBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      public Builder clearConfidence() {
        if (confidenceBuilder_ == null) {
          confidence_ = org.bitcoinj.wallet.Protos.TransactionConfidence.getDefaultInstance();
          onChanged();
        } else {
          confidenceBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      public org.bitcoinj.wallet.Protos.TransactionConfidence.Builder getConfidenceBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getConfidenceFieldBuilder().getBuilder();
      }
      public org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder getConfidenceOrBuilder() {
        if (confidenceBuilder_ != null) {
          return confidenceBuilder_.getMessageOrBuilder();
        } else {
          return confidence_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          org.bitcoinj.wallet.Protos.TransactionConfidence, org.bitcoinj.wallet.Protos.TransactionConfidence.Builder, org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder> 
          getConfidenceFieldBuilder() {
        if (confidenceBuilder_ == null) {
          confidenceBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bitcoinj.wallet.Protos.TransactionConfidence, org.bitcoinj.wallet.Protos.TransactionConfidence.Builder, org.bitcoinj.wallet.Protos.TransactionConfidenceOrBuilder>(
                  confidence_,
                  getParentForChildren(),
                  isClean());
          confidence_ = null;
        }
        return confidenceBuilder_;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.Transaction)
    }
    
    static {
      defaultInstance = new Transaction(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.Transaction)
  }
  
  public interface ScryptParametersOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required bytes salt = 1;
    boolean hasSalt();
    com.google.protobuf.ByteString getSalt();
    
    // optional int64 n = 2 [default = 16384];
    boolean hasN();
    long getN();
    
    // optional int32 r = 3 [default = 8];
    boolean hasR();
    int getR();
    
    // optional int32 p = 4 [default = 1];
    boolean hasP();
    int getP();
  }
  public static final class ScryptParameters extends
      com.google.protobuf.GeneratedMessage
      implements ScryptParametersOrBuilder {
    // Use ScryptParameters.newBuilder() to construct.
    private ScryptParameters(Builder builder) {
      super(builder);
    }
    private ScryptParameters(boolean noInit) {}
    
    private static final ScryptParameters defaultInstance;
    public static ScryptParameters getDefaultInstance() {
      return defaultInstance;
    }
    
    public ScryptParameters getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_ScryptParameters_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_ScryptParameters_fieldAccessorTable;
    }
    
    private int bitField0_;
    // required bytes salt = 1;
    public static final int SALT_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString salt_;
    public boolean hasSalt() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.google.protobuf.ByteString getSalt() {
      return salt_;
    }
    
    // optional int64 n = 2 [default = 16384];
    public static final int N_FIELD_NUMBER = 2;
    private long n_;
    public boolean hasN() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public long getN() {
      return n_;
    }
    
    // optional int32 r = 3 [default = 8];
    public static final int R_FIELD_NUMBER = 3;
    private int r_;
    public boolean hasR() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public int getR() {
      return r_;
    }
    
    // optional int32 p = 4 [default = 1];
    public static final int P_FIELD_NUMBER = 4;
    private int p_;
    public boolean hasP() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public int getP() {
      return p_;
    }
    
    private void initFields() {
      salt_ = com.google.protobuf.ByteString.EMPTY;
      n_ = 16384L;
      r_ = 8;
      p_ = 1;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasSalt()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, salt_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, n_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, r_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, p_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, salt_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, n_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, r_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, p_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.ScryptParameters parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.ScryptParameters prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.ScryptParametersOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_ScryptParameters_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_ScryptParameters_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.ScryptParameters.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        salt_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        n_ = 16384L;
        bitField0_ = (bitField0_ & ~0x00000002);
        r_ = 8;
        bitField0_ = (bitField0_ & ~0x00000004);
        p_ = 1;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.ScryptParameters.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.ScryptParameters getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.ScryptParameters.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.ScryptParameters build() {
        org.bitcoinj.wallet.Protos.ScryptParameters result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.ScryptParameters buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.ScryptParameters result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.ScryptParameters buildPartial() {
        org.bitcoinj.wallet.Protos.ScryptParameters result = new org.bitcoinj.wallet.Protos.ScryptParameters(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.salt_ = salt_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.n_ = n_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.r_ = r_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.p_ = p_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.ScryptParameters) {
          return mergeFrom((org.bitcoinj.wallet.Protos.ScryptParameters)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.ScryptParameters other) {
        if (other == org.bitcoinj.wallet.Protos.ScryptParameters.getDefaultInstance()) return this;
        if (other.hasSalt()) {
          setSalt(other.getSalt());
        }
        if (other.hasN()) {
          setN(other.getN());
        }
        if (other.hasR()) {
          setR(other.getR());
        }
        if (other.hasP()) {
          setP(other.getP());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasSalt()) {
          
          return false;
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              salt_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              n_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              r_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              p_ = input.readInt32();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required bytes salt = 1;
      private com.google.protobuf.ByteString salt_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasSalt() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.google.protobuf.ByteString getSalt() {
        return salt_;
      }
      public Builder setSalt(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        salt_ = value;
        onChanged();
        return this;
      }
      public Builder clearSalt() {
        bitField0_ = (bitField0_ & ~0x00000001);
        salt_ = getDefaultInstance().getSalt();
        onChanged();
        return this;
      }
      
      // optional int64 n = 2 [default = 16384];
      private long n_ = 16384L;
      public boolean hasN() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public long getN() {
        return n_;
      }
      public Builder setN(long value) {
        bitField0_ |= 0x00000002;
        n_ = value;
        onChanged();
        return this;
      }
      public Builder clearN() {
        bitField0_ = (bitField0_ & ~0x00000002);
        n_ = 16384L;
        onChanged();
        return this;
      }
      
      // optional int32 r = 3 [default = 8];
      private int r_ = 8;
      public boolean hasR() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public int getR() {
        return r_;
      }
      public Builder setR(int value) {
        bitField0_ |= 0x00000004;
        r_ = value;
        onChanged();
        return this;
      }
      public Builder clearR() {
        bitField0_ = (bitField0_ & ~0x00000004);
        r_ = 8;
        onChanged();
        return this;
      }
      
      // optional int32 p = 4 [default = 1];
      private int p_ = 1;
      public boolean hasP() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public int getP() {
        return p_;
      }
      public Builder setP(int value) {
        bitField0_ |= 0x00000008;
        p_ = value;
        onChanged();
        return this;
      }
      public Builder clearP() {
        bitField0_ = (bitField0_ & ~0x00000008);
        p_ = 1;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.ScryptParameters)
    }
    
    static {
      defaultInstance = new ScryptParameters(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.ScryptParameters)
  }
  
  public interface ExtensionOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required string id = 1;
    boolean hasId();
    String getId();
    
    // required bytes data = 2;
    boolean hasData();
    com.google.protobuf.ByteString getData();
    
    // required bool mandatory = 3;
    boolean hasMandatory();
    boolean getMandatory();
  }
  public static final class Extension extends
      com.google.protobuf.GeneratedMessage
      implements ExtensionOrBuilder {
    // Use Extension.newBuilder() to construct.
    private Extension(Builder builder) {
      super(builder);
    }
    private Extension(boolean noInit) {}
    
    private static final Extension defaultInstance;
    public static Extension getDefaultInstance() {
      return defaultInstance;
    }
    
    public Extension getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Extension_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Extension_fieldAccessorTable;
    }
    
    private int bitField0_;
    // required string id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private java.lang.Object id_;
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public String getId() {
      java.lang.Object ref = id_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          id_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // required bytes data = 2;
    public static final int DATA_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString data_;
    public boolean hasData() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.google.protobuf.ByteString getData() {
      return data_;
    }
    
    // required bool mandatory = 3;
    public static final int MANDATORY_FIELD_NUMBER = 3;
    private boolean mandatory_;
    public boolean hasMandatory() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public boolean getMandatory() {
      return mandatory_;
    }
    
    private void initFields() {
      id_ = "";
      data_ = com.google.protobuf.ByteString.EMPTY;
      mandatory_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasData()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMandatory()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, data_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, mandatory_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, data_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, mandatory_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Extension parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Extension parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Extension parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.Extension prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.ExtensionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Extension_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Extension_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.Extension.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        id_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        mandatory_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.Extension.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.Extension getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.Extension.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.Extension build() {
        org.bitcoinj.wallet.Protos.Extension result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.Extension buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.Extension result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.Extension buildPartial() {
        org.bitcoinj.wallet.Protos.Extension result = new org.bitcoinj.wallet.Protos.Extension(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.mandatory_ = mandatory_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.Extension) {
          return mergeFrom((org.bitcoinj.wallet.Protos.Extension)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.Extension other) {
        if (other == org.bitcoinj.wallet.Protos.Extension.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasData()) {
          setData(other.getData());
        }
        if (other.hasMandatory()) {
          setMandatory(other.getMandatory());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasId()) {
          
          return false;
        }
        if (!hasData()) {
          
          return false;
        }
        if (!hasMandatory()) {
          
          return false;
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              id_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              data_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              mandatory_ = input.readBool();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required string id = 1;
      private java.lang.Object id_ = "";
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setId(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }
      void setId(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
      }
      
      // required bytes data = 2;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasData() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        data_ = value;
        onChanged();
        return this;
      }
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000002);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }
      
      // required bool mandatory = 3;
      private boolean mandatory_ ;
      public boolean hasMandatory() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public boolean getMandatory() {
        return mandatory_;
      }
      public Builder setMandatory(boolean value) {
        bitField0_ |= 0x00000004;
        mandatory_ = value;
        onChanged();
        return this;
      }
      public Builder clearMandatory() {
        bitField0_ = (bitField0_ & ~0x00000004);
        mandatory_ = false;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.Extension)
    }
    
    static {
      defaultInstance = new Extension(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.Extension)
  }
  
  public interface WalletOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // required string network_identifier = 1;
    boolean hasNetworkIdentifier();
    String getNetworkIdentifier();
    
    // optional bytes last_seen_block_hash = 2;
    boolean hasLastSeenBlockHash();
    com.google.protobuf.ByteString getLastSeenBlockHash();
    
    // optional uint32 last_seen_block_height = 12;
    boolean hasLastSeenBlockHeight();
    int getLastSeenBlockHeight();
    
    // repeated .wallet.Key key = 3;
    java.util.List<org.bitcoinj.wallet.Protos.Key> 
        getKeyList();
    org.bitcoinj.wallet.Protos.Key getKey(int index);
    int getKeyCount();
    java.util.List<? extends org.bitcoinj.wallet.Protos.KeyOrBuilder> 
        getKeyOrBuilderList();
    org.bitcoinj.wallet.Protos.KeyOrBuilder getKeyOrBuilder(
        int index);
    
    // repeated .wallet.Transaction transaction = 4;
    java.util.List<org.bitcoinj.wallet.Protos.Transaction> 
        getTransactionList();
    org.bitcoinj.wallet.Protos.Transaction getTransaction(int index);
    int getTransactionCount();
    java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionOrBuilder> 
        getTransactionOrBuilderList();
    org.bitcoinj.wallet.Protos.TransactionOrBuilder getTransactionOrBuilder(
        int index);
    
    // optional .wallet.Wallet.EncryptionType encryption_type = 5 [default = UNENCRYPTED];
    boolean hasEncryptionType();
    org.bitcoinj.wallet.Protos.Wallet.EncryptionType getEncryptionType();
    
    // optional .wallet.ScryptParameters encryption_parameters = 6;
    boolean hasEncryptionParameters();
    org.bitcoinj.wallet.Protos.ScryptParameters getEncryptionParameters();
    org.bitcoinj.wallet.Protos.ScryptParametersOrBuilder getEncryptionParametersOrBuilder();
    
    // optional int32 version = 7;
    boolean hasVersion();
    int getVersion();
    
    // repeated .wallet.Extension extension = 10;
    java.util.List<org.bitcoinj.wallet.Protos.Extension> 
        getExtensionList();
    org.bitcoinj.wallet.Protos.Extension getExtension(int index);
    int getExtensionCount();
    java.util.List<? extends org.bitcoinj.wallet.Protos.ExtensionOrBuilder> 
        getExtensionOrBuilderList();
    org.bitcoinj.wallet.Protos.ExtensionOrBuilder getExtensionOrBuilder(
        int index);
    
    // optional string description = 11;
    boolean hasDescription();
    String getDescription();
  }
  public static final class Wallet extends
      com.google.protobuf.GeneratedMessage
      implements WalletOrBuilder {
    // Use Wallet.newBuilder() to construct.
    private Wallet(Builder builder) {
      super(builder);
    }
    private Wallet(boolean noInit) {}
    
    private static final Wallet defaultInstance;
    public static Wallet getDefaultInstance() {
      return defaultInstance;
    }
    
    public Wallet getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Wallet_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.bitcoinj.wallet.Protos.internal_static_wallet_Wallet_fieldAccessorTable;
    }
    
    public enum EncryptionType
        implements com.google.protobuf.ProtocolMessageEnum {
      UNENCRYPTED(0, 1),
      ENCRYPTED_SCRYPT_AES(1, 2),
      ;
      
      public static final int UNENCRYPTED_VALUE = 1;
      public static final int ENCRYPTED_SCRYPT_AES_VALUE = 2;
      
      
      public final int getNumber() { return value; }
      
      public static EncryptionType valueOf(int value) {
        switch (value) {
          case 1: return UNENCRYPTED;
          case 2: return ENCRYPTED_SCRYPT_AES;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<EncryptionType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<EncryptionType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<EncryptionType>() {
              public EncryptionType findValueByNumber(int number) {
                return EncryptionType.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.Wallet.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final EncryptionType[] VALUES = {
        UNENCRYPTED, ENCRYPTED_SCRYPT_AES, 
      };
      
      public static EncryptionType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private EncryptionType(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:wallet.Wallet.EncryptionType)
    }
    
    private int bitField0_;
    // required string network_identifier = 1;
    public static final int NETWORK_IDENTIFIER_FIELD_NUMBER = 1;
    private java.lang.Object networkIdentifier_;
    public boolean hasNetworkIdentifier() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public String getNetworkIdentifier() {
      java.lang.Object ref = networkIdentifier_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          networkIdentifier_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getNetworkIdentifierBytes() {
      java.lang.Object ref = networkIdentifier_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        networkIdentifier_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // optional bytes last_seen_block_hash = 2;
    public static final int LAST_SEEN_BLOCK_HASH_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString lastSeenBlockHash_;
    public boolean hasLastSeenBlockHash() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.google.protobuf.ByteString getLastSeenBlockHash() {
      return lastSeenBlockHash_;
    }
    
    // optional uint32 last_seen_block_height = 12;
    public static final int LAST_SEEN_BLOCK_HEIGHT_FIELD_NUMBER = 12;
    private int lastSeenBlockHeight_;
    public boolean hasLastSeenBlockHeight() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public int getLastSeenBlockHeight() {
      return lastSeenBlockHeight_;
    }
    
    // repeated .wallet.Key key = 3;
    public static final int KEY_FIELD_NUMBER = 3;
    private java.util.List<org.bitcoinj.wallet.Protos.Key> key_;
    public java.util.List<org.bitcoinj.wallet.Protos.Key> getKeyList() {
      return key_;
    }
    public java.util.List<? extends org.bitcoinj.wallet.Protos.KeyOrBuilder> 
        getKeyOrBuilderList() {
      return key_;
    }
    public int getKeyCount() {
      return key_.size();
    }
    public org.bitcoinj.wallet.Protos.Key getKey(int index) {
      return key_.get(index);
    }
    public org.bitcoinj.wallet.Protos.KeyOrBuilder getKeyOrBuilder(
        int index) {
      return key_.get(index);
    }
    
    // repeated .wallet.Transaction transaction = 4;
    public static final int TRANSACTION_FIELD_NUMBER = 4;
    private java.util.List<org.bitcoinj.wallet.Protos.Transaction> transaction_;
    public java.util.List<org.bitcoinj.wallet.Protos.Transaction> getTransactionList() {
      return transaction_;
    }
    public java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionOrBuilder> 
        getTransactionOrBuilderList() {
      return transaction_;
    }
    public int getTransactionCount() {
      return transaction_.size();
    }
    public org.bitcoinj.wallet.Protos.Transaction getTransaction(int index) {
      return transaction_.get(index);
    }
    public org.bitcoinj.wallet.Protos.TransactionOrBuilder getTransactionOrBuilder(
        int index) {
      return transaction_.get(index);
    }
    
    // optional .wallet.Wallet.EncryptionType encryption_type = 5 [default = UNENCRYPTED];
    public static final int ENCRYPTION_TYPE_FIELD_NUMBER = 5;
    private org.bitcoinj.wallet.Protos.Wallet.EncryptionType encryptionType_;
    public boolean hasEncryptionType() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public org.bitcoinj.wallet.Protos.Wallet.EncryptionType getEncryptionType() {
      return encryptionType_;
    }
    
    // optional .wallet.ScryptParameters encryption_parameters = 6;
    public static final int ENCRYPTION_PARAMETERS_FIELD_NUMBER = 6;
    private org.bitcoinj.wallet.Protos.ScryptParameters encryptionParameters_;
    public boolean hasEncryptionParameters() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public org.bitcoinj.wallet.Protos.ScryptParameters getEncryptionParameters() {
      return encryptionParameters_;
    }
    public org.bitcoinj.wallet.Protos.ScryptParametersOrBuilder getEncryptionParametersOrBuilder() {
      return encryptionParameters_;
    }
    
    // optional int32 version = 7;
    public static final int VERSION_FIELD_NUMBER = 7;
    private int version_;
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public int getVersion() {
      return version_;
    }
    
    // repeated .wallet.Extension extension = 10;
    public static final int EXTENSION_FIELD_NUMBER = 10;
    private java.util.List<org.bitcoinj.wallet.Protos.Extension> extension_;
    public java.util.List<org.bitcoinj.wallet.Protos.Extension> getExtensionList() {
      return extension_;
    }
    public java.util.List<? extends org.bitcoinj.wallet.Protos.ExtensionOrBuilder> 
        getExtensionOrBuilderList() {
      return extension_;
    }
    public int getExtensionCount() {
      return extension_.size();
    }
    public org.bitcoinj.wallet.Protos.Extension getExtension(int index) {
      return extension_.get(index);
    }
    public org.bitcoinj.wallet.Protos.ExtensionOrBuilder getExtensionOrBuilder(
        int index) {
      return extension_.get(index);
    }
    
    // optional string description = 11;
    public static final int DESCRIPTION_FIELD_NUMBER = 11;
    private java.lang.Object description_;
    public boolean hasDescription() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    public String getDescription() {
      java.lang.Object ref = description_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          description_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    private void initFields() {
      networkIdentifier_ = "";
      lastSeenBlockHash_ = com.google.protobuf.ByteString.EMPTY;
      lastSeenBlockHeight_ = 0;
      key_ = java.util.Collections.emptyList();
      transaction_ = java.util.Collections.emptyList();
      encryptionType_ = org.bitcoinj.wallet.Protos.Wallet.EncryptionType.UNENCRYPTED;
      encryptionParameters_ = org.bitcoinj.wallet.Protos.ScryptParameters.getDefaultInstance();
      version_ = 0;
      extension_ = java.util.Collections.emptyList();
      description_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      if (!hasNetworkIdentifier()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getKeyCount(); i++) {
        if (!getKey(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getTransactionCount(); i++) {
        if (!getTransaction(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasEncryptionParameters()) {
        if (!getEncryptionParameters().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getExtensionCount(); i++) {
        if (!getExtension(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNetworkIdentifierBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, lastSeenBlockHash_);
      }
      for (int i = 0; i < key_.size(); i++) {
        output.writeMessage(3, key_.get(i));
      }
      for (int i = 0; i < transaction_.size(); i++) {
        output.writeMessage(4, transaction_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(5, encryptionType_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(6, encryptionParameters_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(7, version_);
      }
      for (int i = 0; i < extension_.size(); i++) {
        output.writeMessage(10, extension_.get(i));
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(11, getDescriptionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(12, lastSeenBlockHeight_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNetworkIdentifierBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, lastSeenBlockHash_);
      }
      for (int i = 0; i < key_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, key_.get(i));
      }
      for (int i = 0; i < transaction_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, transaction_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, encryptionType_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, encryptionParameters_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, version_);
      }
      for (int i = 0; i < extension_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, extension_.get(i));
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getDescriptionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(12, lastSeenBlockHeight_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static org.bitcoinj.wallet.Protos.Wallet parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(org.bitcoinj.wallet.Protos.Wallet prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements org.bitcoinj.wallet.Protos.WalletOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Wallet_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.bitcoinj.wallet.Protos.internal_static_wallet_Wallet_fieldAccessorTable;
      }
      
      // Construct using org.bitcoinj.wallet.Protos.Wallet.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getKeyFieldBuilder();
          getTransactionFieldBuilder();
          getEncryptionParametersFieldBuilder();
          getExtensionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        networkIdentifier_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        lastSeenBlockHash_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        lastSeenBlockHeight_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (keyBuilder_ == null) {
          key_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          keyBuilder_.clear();
        }
        if (transactionBuilder_ == null) {
          transaction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          transactionBuilder_.clear();
        }
        encryptionType_ = org.bitcoinj.wallet.Protos.Wallet.EncryptionType.UNENCRYPTED;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (encryptionParametersBuilder_ == null) {
          encryptionParameters_ = org.bitcoinj.wallet.Protos.ScryptParameters.getDefaultInstance();
        } else {
          encryptionParametersBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        version_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (extensionBuilder_ == null) {
          extension_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          extensionBuilder_.clear();
        }
        description_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.bitcoinj.wallet.Protos.Wallet.getDescriptor();
      }
      
      public org.bitcoinj.wallet.Protos.Wallet getDefaultInstanceForType() {
        return org.bitcoinj.wallet.Protos.Wallet.getDefaultInstance();
      }
      
      public org.bitcoinj.wallet.Protos.Wallet build() {
        org.bitcoinj.wallet.Protos.Wallet result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private org.bitcoinj.wallet.Protos.Wallet buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        org.bitcoinj.wallet.Protos.Wallet result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public org.bitcoinj.wallet.Protos.Wallet buildPartial() {
        org.bitcoinj.wallet.Protos.Wallet result = new org.bitcoinj.wallet.Protos.Wallet(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.networkIdentifier_ = networkIdentifier_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.lastSeenBlockHash_ = lastSeenBlockHash_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.lastSeenBlockHeight_ = lastSeenBlockHeight_;
        if (keyBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            key_ = java.util.Collections.unmodifiableList(key_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.key_ = key_;
        } else {
          result.key_ = keyBuilder_.build();
        }
        if (transactionBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            transaction_ = java.util.Collections.unmodifiableList(transaction_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.transaction_ = transaction_;
        } else {
          result.transaction_ = transactionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.encryptionType_ = encryptionType_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        if (encryptionParametersBuilder_ == null) {
          result.encryptionParameters_ = encryptionParameters_;
        } else {
          result.encryptionParameters_ = encryptionParametersBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.version_ = version_;
        if (extensionBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            extension_ = java.util.Collections.unmodifiableList(extension_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.extension_ = extension_;
        } else {
          result.extension_ = extensionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000040;
        }
        result.description_ = description_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.bitcoinj.wallet.Protos.Wallet) {
          return mergeFrom((org.bitcoinj.wallet.Protos.Wallet)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(org.bitcoinj.wallet.Protos.Wallet other) {
        if (other == org.bitcoinj.wallet.Protos.Wallet.getDefaultInstance()) return this;
        if (other.hasNetworkIdentifier()) {
          setNetworkIdentifier(other.getNetworkIdentifier());
        }
        if (other.hasLastSeenBlockHash()) {
          setLastSeenBlockHash(other.getLastSeenBlockHash());
        }
        if (other.hasLastSeenBlockHeight()) {
          setLastSeenBlockHeight(other.getLastSeenBlockHeight());
        }
        if (keyBuilder_ == null) {
          if (!other.key_.isEmpty()) {
            if (key_.isEmpty()) {
              key_ = other.key_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureKeyIsMutable();
              key_.addAll(other.key_);
            }
            onChanged();
          }
        } else {
          if (!other.key_.isEmpty()) {
            if (keyBuilder_.isEmpty()) {
              keyBuilder_.dispose();
              keyBuilder_ = null;
              key_ = other.key_;
              bitField0_ = (bitField0_ & ~0x00000008);
              keyBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getKeyFieldBuilder() : null;
            } else {
              keyBuilder_.addAllMessages(other.key_);
            }
          }
        }
        if (transactionBuilder_ == null) {
          if (!other.transaction_.isEmpty()) {
            if (transaction_.isEmpty()) {
              transaction_ = other.transaction_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureTransactionIsMutable();
              transaction_.addAll(other.transaction_);
            }
            onChanged();
          }
        } else {
          if (!other.transaction_.isEmpty()) {
            if (transactionBuilder_.isEmpty()) {
              transactionBuilder_.dispose();
              transactionBuilder_ = null;
              transaction_ = other.transaction_;
              bitField0_ = (bitField0_ & ~0x00000010);
              transactionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTransactionFieldBuilder() : null;
            } else {
              transactionBuilder_.addAllMessages(other.transaction_);
            }
          }
        }
        if (other.hasEncryptionType()) {
          setEncryptionType(other.getEncryptionType());
        }
        if (other.hasEncryptionParameters()) {
          mergeEncryptionParameters(other.getEncryptionParameters());
        }
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (extensionBuilder_ == null) {
          if (!other.extension_.isEmpty()) {
            if (extension_.isEmpty()) {
              extension_ = other.extension_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureExtensionIsMutable();
              extension_.addAll(other.extension_);
            }
            onChanged();
          }
        } else {
          if (!other.extension_.isEmpty()) {
            if (extensionBuilder_.isEmpty()) {
              extensionBuilder_.dispose();
              extensionBuilder_ = null;
              extension_ = other.extension_;
              bitField0_ = (bitField0_ & ~0x00000100);
              extensionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getExtensionFieldBuilder() : null;
            } else {
              extensionBuilder_.addAllMessages(other.extension_);
            }
          }
        }
        if (other.hasDescription()) {
          setDescription(other.getDescription());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        if (!hasNetworkIdentifier()) {
          
          return false;
        }
        for (int i = 0; i < getKeyCount(); i++) {
          if (!getKey(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getTransactionCount(); i++) {
          if (!getTransaction(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasEncryptionParameters()) {
          if (!getEncryptionParameters().isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getExtensionCount(); i++) {
          if (!getExtension(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              networkIdentifier_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              lastSeenBlockHash_ = input.readBytes();
              break;
            }
            case 26: {
              org.bitcoinj.wallet.Protos.Key.Builder subBuilder = org.bitcoinj.wallet.Protos.Key.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addKey(subBuilder.buildPartial());
              break;
            }
            case 34: {
              org.bitcoinj.wallet.Protos.Transaction.Builder subBuilder = org.bitcoinj.wallet.Protos.Transaction.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addTransaction(subBuilder.buildPartial());
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              org.bitcoinj.wallet.Protos.Wallet.EncryptionType value = org.bitcoinj.wallet.Protos.Wallet.EncryptionType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                bitField0_ |= 0x00000020;
                encryptionType_ = value;
              }
              break;
            }
            case 50: {
              org.bitcoinj.wallet.Protos.ScryptParameters.Builder subBuilder = org.bitcoinj.wallet.Protos.ScryptParameters.newBuilder();
              if (hasEncryptionParameters()) {
                subBuilder.mergeFrom(getEncryptionParameters());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setEncryptionParameters(subBuilder.buildPartial());
              break;
            }
            case 56: {
              bitField0_ |= 0x00000080;
              version_ = input.readInt32();
              break;
            }
            case 82: {
              org.bitcoinj.wallet.Protos.Extension.Builder subBuilder = org.bitcoinj.wallet.Protos.Extension.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addExtension(subBuilder.buildPartial());
              break;
            }
            case 90: {
              bitField0_ |= 0x00000200;
              description_ = input.readBytes();
              break;
            }
            case 96: {
              bitField0_ |= 0x00000004;
              lastSeenBlockHeight_ = input.readUInt32();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // required string network_identifier = 1;
      private java.lang.Object networkIdentifier_ = "";
      public boolean hasNetworkIdentifier() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getNetworkIdentifier() {
        java.lang.Object ref = networkIdentifier_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          networkIdentifier_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setNetworkIdentifier(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        networkIdentifier_ = value;
        onChanged();
        return this;
      }
      public Builder clearNetworkIdentifier() {
        bitField0_ = (bitField0_ & ~0x00000001);
        networkIdentifier_ = getDefaultInstance().getNetworkIdentifier();
        onChanged();
        return this;
      }
      void setNetworkIdentifier(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000001;
        networkIdentifier_ = value;
        onChanged();
      }
      
      // optional bytes last_seen_block_hash = 2;
      private com.google.protobuf.ByteString lastSeenBlockHash_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasLastSeenBlockHash() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.google.protobuf.ByteString getLastSeenBlockHash() {
        return lastSeenBlockHash_;
      }
      public Builder setLastSeenBlockHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        lastSeenBlockHash_ = value;
        onChanged();
        return this;
      }
      public Builder clearLastSeenBlockHash() {
        bitField0_ = (bitField0_ & ~0x00000002);
        lastSeenBlockHash_ = getDefaultInstance().getLastSeenBlockHash();
        onChanged();
        return this;
      }
      
      // optional uint32 last_seen_block_height = 12;
      private int lastSeenBlockHeight_ ;
      public boolean hasLastSeenBlockHeight() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public int getLastSeenBlockHeight() {
        return lastSeenBlockHeight_;
      }
      public Builder setLastSeenBlockHeight(int value) {
        bitField0_ |= 0x00000004;
        lastSeenBlockHeight_ = value;
        onChanged();
        return this;
      }
      public Builder clearLastSeenBlockHeight() {
        bitField0_ = (bitField0_ & ~0x00000004);
        lastSeenBlockHeight_ = 0;
        onChanged();
        return this;
      }
      
      // repeated .wallet.Key key = 3;
      private java.util.List<org.bitcoinj.wallet.Protos.Key> key_ =
        java.util.Collections.emptyList();
      private void ensureKeyIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          key_ = new java.util.ArrayList<org.bitcoinj.wallet.Protos.Key>(key_);
          bitField0_ |= 0x00000008;
         }
      }
      
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.Key, org.bitcoinj.wallet.Protos.Key.Builder, org.bitcoinj.wallet.Protos.KeyOrBuilder> keyBuilder_;
      
      public java.util.List<org.bitcoinj.wallet.Protos.Key> getKeyList() {
        if (keyBuilder_ == null) {
          return java.util.Collections.unmodifiableList(key_);
        } else {
          return keyBuilder_.getMessageList();
        }
      }
      public int getKeyCount() {
        if (keyBuilder_ == null) {
          return key_.size();
        } else {
          return keyBuilder_.getCount();
        }
      }
      public org.bitcoinj.wallet.Protos.Key getKey(int index) {
        if (keyBuilder_ == null) {
          return key_.get(index);
        } else {
          return keyBuilder_.getMessage(index);
        }
      }
      public Builder setKey(
          int index, org.bitcoinj.wallet.Protos.Key value) {
        if (keyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKeyIsMutable();
          key_.set(index, value);
          onChanged();
        } else {
          keyBuilder_.setMessage(index, value);
        }
        return this;
      }
      public Builder setKey(
          int index, org.bitcoinj.wallet.Protos.Key.Builder builderForValue) {
        if (keyBuilder_ == null) {
          ensureKeyIsMutable();
          key_.set(index, builderForValue.build());
          onChanged();
        } else {
          keyBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addKey(org.bitcoinj.wallet.Protos.Key value) {
        if (keyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKeyIsMutable();
          key_.add(value);
          onChanged();
        } else {
          keyBuilder_.addMessage(value);
        }
        return this;
      }
      public Builder addKey(
          int index, org.bitcoinj.wallet.Protos.Key value) {
        if (keyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKeyIsMutable();
          key_.add(index, value);
          onChanged();
        } else {
          keyBuilder_.addMessage(index, value);
        }
        return this;
      }
      public Builder addKey(
          org.bitcoinj.wallet.Protos.Key.Builder builderForValue) {
        if (keyBuilder_ == null) {
          ensureKeyIsMutable();
          key_.add(builderForValue.build());
          onChanged();
        } else {
          keyBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      public Builder addKey(
          int index, org.bitcoinj.wallet.Protos.Key.Builder builderForValue) {
        if (keyBuilder_ == null) {
          ensureKeyIsMutable();
          key_.add(index, builderForValue.build());
          onChanged();
        } else {
          keyBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addAllKey(
          java.lang.Iterable<? extends org.bitcoinj.wallet.Protos.Key> values) {
        if (keyBuilder_ == null) {
          ensureKeyIsMutable();
          super.addAll(values, key_);
          onChanged();
        } else {
          keyBuilder_.addAllMessages(values);
        }
        return this;
      }
      public Builder clearKey() {
        if (keyBuilder_ == null) {
          key_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          keyBuilder_.clear();
        }
        return this;
      }
      public Builder removeKey(int index) {
        if (keyBuilder_ == null) {
          ensureKeyIsMutable();
          key_.remove(index);
          onChanged();
        } else {
          keyBuilder_.remove(index);
        }
        return this;
      }
      public org.bitcoinj.wallet.Protos.Key.Builder getKeyBuilder(
          int index) {
        return getKeyFieldBuilder().getBuilder(index);
      }
      public org.bitcoinj.wallet.Protos.KeyOrBuilder getKeyOrBuilder(
          int index) {
        if (keyBuilder_ == null) {
          return key_.get(index);  } else {
          return keyBuilder_.getMessageOrBuilder(index);
        }
      }
      public java.util.List<? extends org.bitcoinj.wallet.Protos.KeyOrBuilder> 
           getKeyOrBuilderList() {
        if (keyBuilder_ != null) {
          return keyBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(key_);
        }
      }
      public org.bitcoinj.wallet.Protos.Key.Builder addKeyBuilder() {
        return getKeyFieldBuilder().addBuilder(
            org.bitcoinj.wallet.Protos.Key.getDefaultInstance());
      }
      public org.bitcoinj.wallet.Protos.Key.Builder addKeyBuilder(
          int index) {
        return getKeyFieldBuilder().addBuilder(
            index, org.bitcoinj.wallet.Protos.Key.getDefaultInstance());
      }
      public java.util.List<org.bitcoinj.wallet.Protos.Key.Builder> 
           getKeyBuilderList() {
        return getKeyFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.Key, org.bitcoinj.wallet.Protos.Key.Builder, org.bitcoinj.wallet.Protos.KeyOrBuilder> 
          getKeyFieldBuilder() {
        if (keyBuilder_ == null) {
          keyBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bitcoinj.wallet.Protos.Key, org.bitcoinj.wallet.Protos.Key.Builder, org.bitcoinj.wallet.Protos.KeyOrBuilder>(
                  key_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          key_ = null;
        }
        return keyBuilder_;
      }
      
      // repeated .wallet.Transaction transaction = 4;
      private java.util.List<org.bitcoinj.wallet.Protos.Transaction> transaction_ =
        java.util.Collections.emptyList();
      private void ensureTransactionIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          transaction_ = new java.util.ArrayList<org.bitcoinj.wallet.Protos.Transaction>(transaction_);
          bitField0_ |= 0x00000010;
         }
      }
      
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.Transaction, org.bitcoinj.wallet.Protos.Transaction.Builder, org.bitcoinj.wallet.Protos.TransactionOrBuilder> transactionBuilder_;
      
      public java.util.List<org.bitcoinj.wallet.Protos.Transaction> getTransactionList() {
        if (transactionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(transaction_);
        } else {
          return transactionBuilder_.getMessageList();
        }
      }
      public int getTransactionCount() {
        if (transactionBuilder_ == null) {
          return transaction_.size();
        } else {
          return transactionBuilder_.getCount();
        }
      }
      public org.bitcoinj.wallet.Protos.Transaction getTransaction(int index) {
        if (transactionBuilder_ == null) {
          return transaction_.get(index);
        } else {
          return transactionBuilder_.getMessage(index);
        }
      }
      public Builder setTransaction(
          int index, org.bitcoinj.wallet.Protos.Transaction value) {
        if (transactionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionIsMutable();
          transaction_.set(index, value);
          onChanged();
        } else {
          transactionBuilder_.setMessage(index, value);
        }
        return this;
      }
      public Builder setTransaction(
          int index, org.bitcoinj.wallet.Protos.Transaction.Builder builderForValue) {
        if (transactionBuilder_ == null) {
          ensureTransactionIsMutable();
          transaction_.set(index, builderForValue.build());
          onChanged();
        } else {
          transactionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addTransaction(org.bitcoinj.wallet.Protos.Transaction value) {
        if (transactionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionIsMutable();
          transaction_.add(value);
          onChanged();
        } else {
          transactionBuilder_.addMessage(value);
        }
        return this;
      }
      public Builder addTransaction(
          int index, org.bitcoinj.wallet.Protos.Transaction value) {
        if (transactionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTransactionIsMutable();
          transaction_.add(index, value);
          onChanged();
        } else {
          transactionBuilder_.addMessage(index, value);
        }
        return this;
      }
      public Builder addTransaction(
          org.bitcoinj.wallet.Protos.Transaction.Builder builderForValue) {
        if (transactionBuilder_ == null) {
          ensureTransactionIsMutable();
          transaction_.add(builderForValue.build());
          onChanged();
        } else {
          transactionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      public Builder addTransaction(
          int index, org.bitcoinj.wallet.Protos.Transaction.Builder builderForValue) {
        if (transactionBuilder_ == null) {
          ensureTransactionIsMutable();
          transaction_.add(index, builderForValue.build());
          onChanged();
        } else {
          transactionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addAllTransaction(
          java.lang.Iterable<? extends org.bitcoinj.wallet.Protos.Transaction> values) {
        if (transactionBuilder_ == null) {
          ensureTransactionIsMutable();
          super.addAll(values, transaction_);
          onChanged();
        } else {
          transactionBuilder_.addAllMessages(values);
        }
        return this;
      }
      public Builder clearTransaction() {
        if (transactionBuilder_ == null) {
          transaction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          transactionBuilder_.clear();
        }
        return this;
      }
      public Builder removeTransaction(int index) {
        if (transactionBuilder_ == null) {
          ensureTransactionIsMutable();
          transaction_.remove(index);
          onChanged();
        } else {
          transactionBuilder_.remove(index);
        }
        return this;
      }
      public org.bitcoinj.wallet.Protos.Transaction.Builder getTransactionBuilder(
          int index) {
        return getTransactionFieldBuilder().getBuilder(index);
      }
      public org.bitcoinj.wallet.Protos.TransactionOrBuilder getTransactionOrBuilder(
          int index) {
        if (transactionBuilder_ == null) {
          return transaction_.get(index);  } else {
          return transactionBuilder_.getMessageOrBuilder(index);
        }
      }
      public java.util.List<? extends org.bitcoinj.wallet.Protos.TransactionOrBuilder> 
           getTransactionOrBuilderList() {
        if (transactionBuilder_ != null) {
          return transactionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(transaction_);
        }
      }
      public org.bitcoinj.wallet.Protos.Transaction.Builder addTransactionBuilder() {
        return getTransactionFieldBuilder().addBuilder(
            org.bitcoinj.wallet.Protos.Transaction.getDefaultInstance());
      }
      public org.bitcoinj.wallet.Protos.Transaction.Builder addTransactionBuilder(
          int index) {
        return getTransactionFieldBuilder().addBuilder(
            index, org.bitcoinj.wallet.Protos.Transaction.getDefaultInstance());
      }
      public java.util.List<org.bitcoinj.wallet.Protos.Transaction.Builder> 
           getTransactionBuilderList() {
        return getTransactionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.Transaction, org.bitcoinj.wallet.Protos.Transaction.Builder, org.bitcoinj.wallet.Protos.TransactionOrBuilder> 
          getTransactionFieldBuilder() {
        if (transactionBuilder_ == null) {
          transactionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bitcoinj.wallet.Protos.Transaction, org.bitcoinj.wallet.Protos.Transaction.Builder, org.bitcoinj.wallet.Protos.TransactionOrBuilder>(
                  transaction_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          transaction_ = null;
        }
        return transactionBuilder_;
      }
      
      // optional .wallet.Wallet.EncryptionType encryption_type = 5 [default = UNENCRYPTED];
      private org.bitcoinj.wallet.Protos.Wallet.EncryptionType encryptionType_ = org.bitcoinj.wallet.Protos.Wallet.EncryptionType.UNENCRYPTED;
      public boolean hasEncryptionType() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      public org.bitcoinj.wallet.Protos.Wallet.EncryptionType getEncryptionType() {
        return encryptionType_;
      }
      public Builder setEncryptionType(org.bitcoinj.wallet.Protos.Wallet.EncryptionType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000020;
        encryptionType_ = value;
        onChanged();
        return this;
      }
      public Builder clearEncryptionType() {
        bitField0_ = (bitField0_ & ~0x00000020);
        encryptionType_ = org.bitcoinj.wallet.Protos.Wallet.EncryptionType.UNENCRYPTED;
        onChanged();
        return this;
      }
      
      // optional .wallet.ScryptParameters encryption_parameters = 6;
      private org.bitcoinj.wallet.Protos.ScryptParameters encryptionParameters_ = org.bitcoinj.wallet.Protos.ScryptParameters.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          org.bitcoinj.wallet.Protos.ScryptParameters, org.bitcoinj.wallet.Protos.ScryptParameters.Builder, org.bitcoinj.wallet.Protos.ScryptParametersOrBuilder> encryptionParametersBuilder_;
      public boolean hasEncryptionParameters() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      public org.bitcoinj.wallet.Protos.ScryptParameters getEncryptionParameters() {
        if (encryptionParametersBuilder_ == null) {
          return encryptionParameters_;
        } else {
          return encryptionParametersBuilder_.getMessage();
        }
      }
      public Builder setEncryptionParameters(org.bitcoinj.wallet.Protos.ScryptParameters value) {
        if (encryptionParametersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          encryptionParameters_ = value;
          onChanged();
        } else {
          encryptionParametersBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      public Builder setEncryptionParameters(
          org.bitcoinj.wallet.Protos.ScryptParameters.Builder builderForValue) {
        if (encryptionParametersBuilder_ == null) {
          encryptionParameters_ = builderForValue.build();
          onChanged();
        } else {
          encryptionParametersBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      public Builder mergeEncryptionParameters(org.bitcoinj.wallet.Protos.ScryptParameters value) {
        if (encryptionParametersBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              encryptionParameters_ != org.bitcoinj.wallet.Protos.ScryptParameters.getDefaultInstance()) {
            encryptionParameters_ =
              org.bitcoinj.wallet.Protos.ScryptParameters.newBuilder(encryptionParameters_).mergeFrom(value).buildPartial();
          } else {
            encryptionParameters_ = value;
          }
          onChanged();
        } else {
          encryptionParametersBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      public Builder clearEncryptionParameters() {
        if (encryptionParametersBuilder_ == null) {
          encryptionParameters_ = org.bitcoinj.wallet.Protos.ScryptParameters.getDefaultInstance();
          onChanged();
        } else {
          encryptionParametersBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      public org.bitcoinj.wallet.Protos.ScryptParameters.Builder getEncryptionParametersBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getEncryptionParametersFieldBuilder().getBuilder();
      }
      public org.bitcoinj.wallet.Protos.ScryptParametersOrBuilder getEncryptionParametersOrBuilder() {
        if (encryptionParametersBuilder_ != null) {
          return encryptionParametersBuilder_.getMessageOrBuilder();
        } else {
          return encryptionParameters_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          org.bitcoinj.wallet.Protos.ScryptParameters, org.bitcoinj.wallet.Protos.ScryptParameters.Builder, org.bitcoinj.wallet.Protos.ScryptParametersOrBuilder> 
          getEncryptionParametersFieldBuilder() {
        if (encryptionParametersBuilder_ == null) {
          encryptionParametersBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              org.bitcoinj.wallet.Protos.ScryptParameters, org.bitcoinj.wallet.Protos.ScryptParameters.Builder, org.bitcoinj.wallet.Protos.ScryptParametersOrBuilder>(
                  encryptionParameters_,
                  getParentForChildren(),
                  isClean());
          encryptionParameters_ = null;
        }
        return encryptionParametersBuilder_;
      }
      
      // optional int32 version = 7;
      private int version_ ;
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      public int getVersion() {
        return version_;
      }
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000080;
        version_ = value;
        onChanged();
        return this;
      }
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000080);
        version_ = 0;
        onChanged();
        return this;
      }
      
      // repeated .wallet.Extension extension = 10;
      private java.util.List<org.bitcoinj.wallet.Protos.Extension> extension_ =
        java.util.Collections.emptyList();
      private void ensureExtensionIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          extension_ = new java.util.ArrayList<org.bitcoinj.wallet.Protos.Extension>(extension_);
          bitField0_ |= 0x00000100;
         }
      }
      
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.Extension, org.bitcoinj.wallet.Protos.Extension.Builder, org.bitcoinj.wallet.Protos.ExtensionOrBuilder> extensionBuilder_;
      
      public java.util.List<org.bitcoinj.wallet.Protos.Extension> getExtensionList() {
        if (extensionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(extension_);
        } else {
          return extensionBuilder_.getMessageList();
        }
      }
      public int getExtensionCount() {
        if (extensionBuilder_ == null) {
          return extension_.size();
        } else {
          return extensionBuilder_.getCount();
        }
      }
      public org.bitcoinj.wallet.Protos.Extension getExtension(int index) {
        if (extensionBuilder_ == null) {
          return extension_.get(index);
        } else {
          return extensionBuilder_.getMessage(index);
        }
      }
      public Builder setExtension(
          int index, org.bitcoinj.wallet.Protos.Extension value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.set(index, value);
          onChanged();
        } else {
          extensionBuilder_.setMessage(index, value);
        }
        return this;
      }
      public Builder setExtension(
          int index, org.bitcoinj.wallet.Protos.Extension.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.set(index, builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addExtension(org.bitcoinj.wallet.Protos.Extension value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.add(value);
          onChanged();
        } else {
          extensionBuilder_.addMessage(value);
        }
        return this;
      }
      public Builder addExtension(
          int index, org.bitcoinj.wallet.Protos.Extension value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.add(index, value);
          onChanged();
        } else {
          extensionBuilder_.addMessage(index, value);
        }
        return this;
      }
      public Builder addExtension(
          org.bitcoinj.wallet.Protos.Extension.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.add(builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      public Builder addExtension(
          int index, org.bitcoinj.wallet.Protos.Extension.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.add(index, builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      public Builder addAllExtension(
          java.lang.Iterable<? extends org.bitcoinj.wallet.Protos.Extension> values) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          super.addAll(values, extension_);
          onChanged();
        } else {
          extensionBuilder_.addAllMessages(values);
        }
        return this;
      }
      public Builder clearExtension() {
        if (extensionBuilder_ == null) {
          extension_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          extensionBuilder_.clear();
        }
        return this;
      }
      public Builder removeExtension(int index) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.remove(index);
          onChanged();
        } else {
          extensionBuilder_.remove(index);
        }
        return this;
      }
      public org.bitcoinj.wallet.Protos.Extension.Builder getExtensionBuilder(
          int index) {
        return getExtensionFieldBuilder().getBuilder(index);
      }
      public org.bitcoinj.wallet.Protos.ExtensionOrBuilder getExtensionOrBuilder(
          int index) {
        if (extensionBuilder_ == null) {
          return extension_.get(index);  } else {
          return extensionBuilder_.getMessageOrBuilder(index);
        }
      }
      public java.util.List<? extends org.bitcoinj.wallet.Protos.ExtensionOrBuilder> 
           getExtensionOrBuilderList() {
        if (extensionBuilder_ != null) {
          return extensionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(extension_);
        }
      }
      public org.bitcoinj.wallet.Protos.Extension.Builder addExtensionBuilder() {
        return getExtensionFieldBuilder().addBuilder(
            org.bitcoinj.wallet.Protos.Extension.getDefaultInstance());
      }
      public org.bitcoinj.wallet.Protos.Extension.Builder addExtensionBuilder(
          int index) {
        return getExtensionFieldBuilder().addBuilder(
            index, org.bitcoinj.wallet.Protos.Extension.getDefaultInstance());
      }
      public java.util.List<org.bitcoinj.wallet.Protos.Extension.Builder> 
           getExtensionBuilderList() {
        return getExtensionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          org.bitcoinj.wallet.Protos.Extension, org.bitcoinj.wallet.Protos.Extension.Builder, org.bitcoinj.wallet.Protos.ExtensionOrBuilder> 
          getExtensionFieldBuilder() {
        if (extensionBuilder_ == null) {
          extensionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              org.bitcoinj.wallet.Protos.Extension, org.bitcoinj.wallet.Protos.Extension.Builder, org.bitcoinj.wallet.Protos.ExtensionOrBuilder>(
                  extension_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          extension_ = null;
        }
        return extensionBuilder_;
      }
      
      // optional string description = 11;
      private java.lang.Object description_ = "";
      public boolean hasDescription() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      public String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setDescription(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        description_ = value;
        onChanged();
        return this;
      }
      public Builder clearDescription() {
        bitField0_ = (bitField0_ & ~0x00000200);
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      void setDescription(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000200;
        description_ = value;
        onChanged();
      }
      
      // @@protoc_insertion_point(builder_scope:wallet.Wallet)
    }
    
    static {
      defaultInstance = new Wallet(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:wallet.Wallet)
  }
  
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_PeerAddress_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_PeerAddress_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_EncryptedPrivateKey_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_EncryptedPrivateKey_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_Key_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_Key_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_TransactionInput_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_TransactionInput_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_TransactionOutput_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_TransactionOutput_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_TransactionConfidence_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_TransactionConfidence_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_Transaction_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_Transaction_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_ScryptParameters_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_ScryptParameters_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_Extension_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_Extension_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_wallet_Wallet_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_wallet_Wallet_fieldAccessorTable;
  
  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\rbitcoin.proto\022\006wallet\"A\n\013PeerAddress\022\022" +
      "\n\nip_address\030\001 \002(\014\022\014\n\004port\030\002 \002(\r\022\020\n\010serv" +
      "ices\030\003 \002(\004\"S\n\023EncryptedPrivateKey\022\035\n\025ini" +
      "tialisation_vector\030\001 \002(\014\022\035\n\025encrypted_pr" +
      "ivate_key\030\002 \002(\014\"\345\001\n\003Key\022\036\n\004type\030\001 \002(\0162\020." +
      "wallet.Key.Type\022\023\n\013private_key\030\002 \001(\014\022:\n\025" +
      "encrypted_private_key\030\006 \001(\0132\033.wallet.Enc" +
      "ryptedPrivateKey\022\022\n\npublic_key\030\003 \001(\014\022\r\n\005" +
      "label\030\004 \001(\t\022\032\n\022creation_timestamp\030\005 \001(\003\"" +
      ".\n\004Type\022\014\n\010ORIGINAL\020\001\022\030\n\024ENCRYPTED_SCRYP",
      "T_AES\020\002\"\203\001\n\020TransactionInput\022\"\n\032transact" +
      "ion_out_point_hash\030\001 \002(\014\022#\n\033transaction_" +
      "out_point_index\030\002 \002(\005\022\024\n\014script_bytes\030\003 " +
      "\002(\014\022\020\n\010sequence\030\004 \001(\r\"\177\n\021TransactionOutp" +
      "ut\022\r\n\005value\030\001 \002(\003\022\024\n\014script_bytes\030\002 \002(\014\022" +
      "!\n\031spent_by_transaction_hash\030\003 \001(\014\022\"\n\032sp" +
      "ent_by_transaction_index\030\004 \001(\005\"\246\003\n\025Trans" +
      "actionConfidence\0220\n\004type\030\001 \001(\0162\".wallet." +
      "TransactionConfidence.Type\022\032\n\022appeared_a" +
      "t_height\030\002 \001(\005\022\036\n\026overriding_transaction",
      "\030\003 \001(\014\022\r\n\005depth\030\004 \001(\005\022\021\n\twork_done\030\005 \001(\003" +
      "\022)\n\014broadcast_by\030\006 \003(\0132\023.wallet.PeerAddr" +
      "ess\0224\n\006source\030\007 \001(\0162$.wallet.Transaction" +
      "Confidence.Source\"Y\n\004Type\022\013\n\007UNKNOWN\020\000\022\014" +
      "\n\010BUILDING\020\001\022\025\n\021NOT_SEEN_IN_CHAIN\020\002\022\025\n\021N" +
      "OT_IN_BEST_CHAIN\020\003\022\010\n\004DEAD\020\004\"A\n\006Source\022\022" +
      "\n\016SOURCE_UNKNOWN\020\000\022\022\n\016SOURCE_NETWORK\020\001\022\017" +
      "\n\013SOURCE_SELF\020\002\"\211\003\n\013Transaction\022\017\n\007versi" +
      "on\030\001 \002(\005\022\014\n\004hash\030\002 \002(\014\022&\n\004pool\030\003 \001(\0162\030.w" +
      "allet.Transaction.Pool\022\021\n\tlock_time\030\004 \001(",
      "\r\022\022\n\nupdated_at\030\005 \001(\003\0223\n\021transaction_inp" +
      "ut\030\006 \003(\0132\030.wallet.TransactionInput\0225\n\022tr" +
      "ansaction_output\030\007 \003(\0132\031.wallet.Transact" +
      "ionOutput\022\022\n\nblock_hash\030\010 \003(\014\0221\n\nconfide" +
      "nce\030\t \001(\0132\035.wallet.TransactionConfidence" +
      "\"Y\n\004Pool\022\013\n\007UNSPENT\020\004\022\t\n\005SPENT\020\005\022\014\n\010INAC" +
      "TIVE\020\002\022\010\n\004DEAD\020\n\022\013\n\007PENDING\020\020\022\024\n\020PENDING" +
      "_INACTIVE\020\022\"N\n\020ScryptParameters\022\014\n\004salt\030" +
      "\001 \002(\014\022\020\n\001n\030\002 \001(\003:\00516384\022\014\n\001r\030\003 \001(\005:\0018\022\014\n" +
      "\001p\030\004 \001(\005:\0011\"8\n\tExtension\022\n\n\002id\030\001 \002(\t\022\014\n\004",
      "data\030\002 \002(\014\022\021\n\tmandatory\030\003 \002(\010\"\255\003\n\006Wallet" +
      "\022\032\n\022network_identifier\030\001 \002(\t\022\034\n\024last_see" +
      "n_block_hash\030\002 \001(\014\022\036\n\026last_seen_block_he" +
      "ight\030\014 \001(\r\022\030\n\003key\030\003 \003(\0132\013.wallet.Key\022(\n\013" +
      "transaction\030\004 \003(\0132\023.wallet.Transaction\022C" +
      "\n\017encryption_type\030\005 \001(\0162\035.wallet.Wallet." +
      "EncryptionType:\013UNENCRYPTED\0227\n\025encryptio" +
      "n_parameters\030\006 \001(\0132\030.wallet.ScryptParame" +
      "ters\022\017\n\007version\030\007 \001(\005\022$\n\textension\030\n \003(\013" +
      "2\021.wallet.Extension\022\023\n\013description\030\013 \001(\t",
      "\";\n\016EncryptionType\022\017\n\013UNENCRYPTED\020\001\022\030\n\024E" +
      "NCRYPTED_SCRYPT_AES\020\002B\035\n\023org.bitcoinj.wa" +
      "lletB\006Protos"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_wallet_PeerAddress_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_wallet_PeerAddress_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_PeerAddress_descriptor,
              new java.lang.String[] { "IpAddress", "Port", "Services", },
              org.bitcoinj.wallet.Protos.PeerAddress.class,
              org.bitcoinj.wallet.Protos.PeerAddress.Builder.class);
          internal_static_wallet_EncryptedPrivateKey_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_wallet_EncryptedPrivateKey_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_EncryptedPrivateKey_descriptor,
              new java.lang.String[] { "InitialisationVector", "EncryptedPrivateKey", },
              org.bitcoinj.wallet.Protos.EncryptedPrivateKey.class,
              org.bitcoinj.wallet.Protos.EncryptedPrivateKey.Builder.class);
          internal_static_wallet_Key_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_wallet_Key_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_Key_descriptor,
              new java.lang.String[] { "Type", "PrivateKey", "EncryptedPrivateKey", "PublicKey", "Label", "CreationTimestamp", },
              org.bitcoinj.wallet.Protos.Key.class,
              org.bitcoinj.wallet.Protos.Key.Builder.class);
          internal_static_wallet_TransactionInput_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_wallet_TransactionInput_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_TransactionInput_descriptor,
              new java.lang.String[] { "TransactionOutPointHash", "TransactionOutPointIndex", "ScriptBytes", "Sequence", },
              org.bitcoinj.wallet.Protos.TransactionInput.class,
              org.bitcoinj.wallet.Protos.TransactionInput.Builder.class);
          internal_static_wallet_TransactionOutput_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_wallet_TransactionOutput_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_TransactionOutput_descriptor,
              new java.lang.String[] { "Value", "ScriptBytes", "SpentByTransactionHash", "SpentByTransactionIndex", },
              org.bitcoinj.wallet.Protos.TransactionOutput.class,
              org.bitcoinj.wallet.Protos.TransactionOutput.Builder.class);
          internal_static_wallet_TransactionConfidence_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_wallet_TransactionConfidence_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_TransactionConfidence_descriptor,
              new java.lang.String[] { "Type", "AppearedAtHeight", "OverridingTransaction", "Depth", "WorkDone", "BroadcastBy", "Source", },
              org.bitcoinj.wallet.Protos.TransactionConfidence.class,
              org.bitcoinj.wallet.Protos.TransactionConfidence.Builder.class);
          internal_static_wallet_Transaction_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_wallet_Transaction_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_Transaction_descriptor,
              new java.lang.String[] { "Version", "Hash", "Pool", "LockTime", "UpdatedAt", "TransactionInput", "TransactionOutput", "BlockHash", "Confidence", },
              org.bitcoinj.wallet.Protos.Transaction.class,
              org.bitcoinj.wallet.Protos.Transaction.Builder.class);
          internal_static_wallet_ScryptParameters_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_wallet_ScryptParameters_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_ScryptParameters_descriptor,
              new java.lang.String[] { "Salt", "N", "R", "P", },
              org.bitcoinj.wallet.Protos.ScryptParameters.class,
              org.bitcoinj.wallet.Protos.ScryptParameters.Builder.class);
          internal_static_wallet_Extension_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_wallet_Extension_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_Extension_descriptor,
              new java.lang.String[] { "Id", "Data", "Mandatory", },
              org.bitcoinj.wallet.Protos.Extension.class,
              org.bitcoinj.wallet.Protos.Extension.Builder.class);
          internal_static_wallet_Wallet_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_wallet_Wallet_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_wallet_Wallet_descriptor,
              new java.lang.String[] { "NetworkIdentifier", "LastSeenBlockHash", "LastSeenBlockHeight", "Key", "Transaction", "EncryptionType", "EncryptionParameters", "Version", "Extension", "Description", },
              org.bitcoinj.wallet.Protos.Wallet.class,
              org.bitcoinj.wallet.Protos.Wallet.Builder.class);
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }
  
  // @@protoc_insertion_point(outer_class_scope)
}
