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

package org.bitcoin.protocols.payments;

public final class Protos {
  private Protos() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }
  public interface OutputOrBuilder extends
      // @@protoc_insertion_point(interface_extends:payments.Output)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <pre>
     * amount is integer-number-of-satoshis
     * </pre>
     *
     * <code>optional uint64 amount = 1 [default = 0];</code>
     * @return Whether the amount field is set.
     */
    boolean hasAmount();
    /**
     * <pre>
     * amount is integer-number-of-satoshis
     * </pre>
     *
     * <code>optional uint64 amount = 1 [default = 0];</code>
     * @return The amount.
     */
    long getAmount();

    /**
     * <pre>
     * usually one of the standard Script forms
     * </pre>
     *
     * <code>required bytes script = 2;</code>
     * @return Whether the script field is set.
     */
    boolean hasScript();
    /**
     * <pre>
     * usually one of the standard Script forms
     * </pre>
     *
     * <code>required bytes script = 2;</code>
     * @return The script.
     */
    com.google.protobuf.ByteString getScript();
  }
  /**
   * <pre>
   * Generalized form of "send payment to this/these bitcoin addresses"
   * </pre>
   *
   * Protobuf type {@code payments.Output}
   */
  public  static final class Output extends
      com.google.protobuf.GeneratedMessageLite<
          Output, Output.Builder> implements
      // @@protoc_insertion_point(message_implements:payments.Output)
      OutputOrBuilder {
    private Output() {
      script_ = com.google.protobuf.ByteString.EMPTY;
    }
    private int bitField0_;
    public static final int AMOUNT_FIELD_NUMBER = 1;
    private long amount_;
    /**
     * <pre>
     * amount is integer-number-of-satoshis
     * </pre>
     *
     * <code>optional uint64 amount = 1 [default = 0];</code>
     * @return Whether the amount field is set.
     */
    @java.lang.Override
    public boolean hasAmount() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * amount is integer-number-of-satoshis
     * </pre>
     *
     * <code>optional uint64 amount = 1 [default = 0];</code>
     * @return The amount.
     */
    @java.lang.Override
    public long getAmount() {
      return amount_;
    }
    /**
     * <pre>
     * amount is integer-number-of-satoshis
     * </pre>
     *
     * <code>optional uint64 amount = 1 [default = 0];</code>
     * @param value The amount to set.
     */
    private void setAmount(long value) {
      bitField0_ |= 0x00000001;
      amount_ = value;
    }
    /**
     * <pre>
     * amount is integer-number-of-satoshis
     * </pre>
     *
     * <code>optional uint64 amount = 1 [default = 0];</code>
     */
    private void clearAmount() {
      bitField0_ = (bitField0_ & ~0x00000001);
      amount_ = 0L;
    }

    public static final int SCRIPT_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString script_;
    /**
     * <pre>
     * usually one of the standard Script forms
     * </pre>
     *
     * <code>required bytes script = 2;</code>
     * @return Whether the script field is set.
     */
    @java.lang.Override
    public boolean hasScript() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * usually one of the standard Script forms
     * </pre>
     *
     * <code>required bytes script = 2;</code>
     * @return The script.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getScript() {
      return script_;
    }
    /**
     * <pre>
     * usually one of the standard Script forms
     * </pre>
     *
     * <code>required bytes script = 2;</code>
     * @param value The script to set.
     */
    private void setScript(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000002;
      script_ = value;
    }
    /**
     * <pre>
     * usually one of the standard Script forms
     * </pre>
     *
     * <code>required bytes script = 2;</code>
     */
    private void clearScript() {
      bitField0_ = (bitField0_ & ~0x00000002);
      script_ = getDefaultInstance().getScript();
    }

    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.Output parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(org.bitcoin.protocols.payments.Protos.Output prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * <pre>
     * Generalized form of "send payment to this/these bitcoin addresses"
     * </pre>
     *
     * Protobuf type {@code payments.Output}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          org.bitcoin.protocols.payments.Protos.Output, Builder> implements
        // @@protoc_insertion_point(builder_implements:payments.Output)
        org.bitcoin.protocols.payments.Protos.OutputOrBuilder {
      // Construct using org.bitcoin.protocols.payments.Protos.Output.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <pre>
       * amount is integer-number-of-satoshis
       * </pre>
       *
       * <code>optional uint64 amount = 1 [default = 0];</code>
       * @return Whether the amount field is set.
       */
      @java.lang.Override
      public boolean hasAmount() {
        return instance.hasAmount();
      }
      /**
       * <pre>
       * amount is integer-number-of-satoshis
       * </pre>
       *
       * <code>optional uint64 amount = 1 [default = 0];</code>
       * @return The amount.
       */
      @java.lang.Override
      public long getAmount() {
        return instance.getAmount();
      }
      /**
       * <pre>
       * amount is integer-number-of-satoshis
       * </pre>
       *
       * <code>optional uint64 amount = 1 [default = 0];</code>
       * @param value The amount to set.
       * @return This builder for chaining.
       */
      public Builder setAmount(long value) {
        copyOnWrite();
        instance.setAmount(value);
        return this;
      }
      /**
       * <pre>
       * amount is integer-number-of-satoshis
       * </pre>
       *
       * <code>optional uint64 amount = 1 [default = 0];</code>
       * @return This builder for chaining.
       */
      public Builder clearAmount() {
        copyOnWrite();
        instance.clearAmount();
        return this;
      }

      /**
       * <pre>
       * usually one of the standard Script forms
       * </pre>
       *
       * <code>required bytes script = 2;</code>
       * @return Whether the script field is set.
       */
      @java.lang.Override
      public boolean hasScript() {
        return instance.hasScript();
      }
      /**
       * <pre>
       * usually one of the standard Script forms
       * </pre>
       *
       * <code>required bytes script = 2;</code>
       * @return The script.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getScript() {
        return instance.getScript();
      }
      /**
       * <pre>
       * usually one of the standard Script forms
       * </pre>
       *
       * <code>required bytes script = 2;</code>
       * @param value The script to set.
       * @return This builder for chaining.
       */
      public Builder setScript(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setScript(value);
        return this;
      }
      /**
       * <pre>
       * usually one of the standard Script forms
       * </pre>
       *
       * <code>required bytes script = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearScript() {
        copyOnWrite();
        instance.clearScript();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:payments.Output)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new org.bitcoin.protocols.payments.Protos.Output();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "amount_",
              "script_",
            };
            java.lang.String info =
                "\u0001\u0002\u0000\u0001\u0001\u0002\u0002\u0000\u0000\u0001\u0001\u1003\u0000\u0002" +
                "\u150a\u0001";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<org.bitcoin.protocols.payments.Protos.Output> parser = PARSER;
          if (parser == null) {
            synchronized (org.bitcoin.protocols.payments.Protos.Output.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<org.bitcoin.protocols.payments.Protos.Output>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:payments.Output)
    private static final org.bitcoin.protocols.payments.Protos.Output DEFAULT_INSTANCE;
    static {
      Output defaultInstance = new Output();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        Output.class, defaultInstance);
    }

    public static org.bitcoin.protocols.payments.Protos.Output getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<Output> PARSER;

    public static com.google.protobuf.Parser<Output> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface PaymentDetailsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:payments.PaymentDetails)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @return Whether the network field is set.
     */
    boolean hasNetwork();
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @return The network.
     */
    java.lang.String getNetwork();
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @return The bytes for network.
     */
    com.google.protobuf.ByteString
        getNetworkBytes();

    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    java.util.List<org.bitcoin.protocols.payments.Protos.Output> 
        getOutputsList();
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    org.bitcoin.protocols.payments.Protos.Output getOutputs(int index);
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    int getOutputsCount();

    /**
     * <pre>
     * Timestamp; when payment request created
     * </pre>
     *
     * <code>required uint64 time = 3;</code>
     * @return Whether the time field is set.
     */
    boolean hasTime();
    /**
     * <pre>
     * Timestamp; when payment request created
     * </pre>
     *
     * <code>required uint64 time = 3;</code>
     * @return The time.
     */
    long getTime();

    /**
     * <pre>
     * Timestamp; when this request should be considered invalid
     * </pre>
     *
     * <code>optional uint64 expires = 4;</code>
     * @return Whether the expires field is set.
     */
    boolean hasExpires();
    /**
     * <pre>
     * Timestamp; when this request should be considered invalid
     * </pre>
     *
     * <code>optional uint64 expires = 4;</code>
     * @return The expires.
     */
    long getExpires();

    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @return Whether the memo field is set.
     */
    boolean hasMemo();
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @return The memo.
     */
    java.lang.String getMemo();
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @return The bytes for memo.
     */
    com.google.protobuf.ByteString
        getMemoBytes();

    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @return Whether the paymentUrl field is set.
     */
    boolean hasPaymentUrl();
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @return The paymentUrl.
     */
    java.lang.String getPaymentUrl();
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @return The bytes for paymentUrl.
     */
    com.google.protobuf.ByteString
        getPaymentUrlBytes();

    /**
     * <pre>
     * Arbitrary data to include in the Payment message
     * </pre>
     *
     * <code>optional bytes merchant_data = 7;</code>
     * @return Whether the merchantData field is set.
     */
    boolean hasMerchantData();
    /**
     * <pre>
     * Arbitrary data to include in the Payment message
     * </pre>
     *
     * <code>optional bytes merchant_data = 7;</code>
     * @return The merchantData.
     */
    com.google.protobuf.ByteString getMerchantData();
  }
  /**
   * Protobuf type {@code payments.PaymentDetails}
   */
  public  static final class PaymentDetails extends
      com.google.protobuf.GeneratedMessageLite<
          PaymentDetails, PaymentDetails.Builder> implements
      // @@protoc_insertion_point(message_implements:payments.PaymentDetails)
      PaymentDetailsOrBuilder {
    private PaymentDetails() {
      network_ = "main";
      outputs_ = emptyProtobufList();
      memo_ = "";
      paymentUrl_ = "";
      merchantData_ = com.google.protobuf.ByteString.EMPTY;
    }
    private int bitField0_;
    public static final int NETWORK_FIELD_NUMBER = 1;
    private java.lang.String network_;
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @return Whether the network field is set.
     */
    @java.lang.Override
    public boolean hasNetwork() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @return The network.
     */
    @java.lang.Override
    public java.lang.String getNetwork() {
      return network_;
    }
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @return The bytes for network.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNetworkBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(network_);
    }
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @param value The network to set.
     */
    private void setNetwork(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000001;
      network_ = value;
    }
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     */
    private void clearNetwork() {
      bitField0_ = (bitField0_ & ~0x00000001);
      network_ = getDefaultInstance().getNetwork();
    }
    /**
     * <pre>
     * "main" or "test"
     * </pre>
     *
     * <code>optional string network = 1 [default = "main"];</code>
     * @param value The bytes for network to set.
     */
    private void setNetworkBytes(
        com.google.protobuf.ByteString value) {
      network_ = value.toStringUtf8();
      bitField0_ |= 0x00000001;
    }

    public static final int OUTPUTS_FIELD_NUMBER = 2;
    private com.google.protobuf.Internal.ProtobufList<org.bitcoin.protocols.payments.Protos.Output> outputs_;
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    @java.lang.Override
    public java.util.List<org.bitcoin.protocols.payments.Protos.Output> getOutputsList() {
      return outputs_;
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    public java.util.List<? extends org.bitcoin.protocols.payments.Protos.OutputOrBuilder> 
        getOutputsOrBuilderList() {
      return outputs_;
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    @java.lang.Override
    public int getOutputsCount() {
      return outputs_.size();
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    @java.lang.Override
    public org.bitcoin.protocols.payments.Protos.Output getOutputs(int index) {
      return outputs_.get(index);
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    public org.bitcoin.protocols.payments.Protos.OutputOrBuilder getOutputsOrBuilder(
        int index) {
      return outputs_.get(index);
    }
    private void ensureOutputsIsMutable() {
      com.google.protobuf.Internal.ProtobufList<org.bitcoin.protocols.payments.Protos.Output> tmp = outputs_;
      if (!tmp.isModifiable()) {
        outputs_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }

    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    private void setOutputs(
        int index, org.bitcoin.protocols.payments.Protos.Output value) {
      value.getClass();
  ensureOutputsIsMutable();
      outputs_.set(index, value);
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    private void addOutputs(org.bitcoin.protocols.payments.Protos.Output value) {
      value.getClass();
  ensureOutputsIsMutable();
      outputs_.add(value);
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    private void addOutputs(
        int index, org.bitcoin.protocols.payments.Protos.Output value) {
      value.getClass();
  ensureOutputsIsMutable();
      outputs_.add(index, value);
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    private void addAllOutputs(
        java.lang.Iterable<? extends org.bitcoin.protocols.payments.Protos.Output> values) {
      ensureOutputsIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, outputs_);
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    private void clearOutputs() {
      outputs_ = emptyProtobufList();
    }
    /**
     * <pre>
     * Where payment should be sent
     * </pre>
     *
     * <code>repeated .payments.Output outputs = 2;</code>
     */
    private void removeOutputs(int index) {
      ensureOutputsIsMutable();
      outputs_.remove(index);
    }

    public static final int TIME_FIELD_NUMBER = 3;
    private long time_;
    /**
     * <pre>
     * Timestamp; when payment request created
     * </pre>
     *
     * <code>required uint64 time = 3;</code>
     * @return Whether the time field is set.
     */
    @java.lang.Override
    public boolean hasTime() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Timestamp; when payment request created
     * </pre>
     *
     * <code>required uint64 time = 3;</code>
     * @return The time.
     */
    @java.lang.Override
    public long getTime() {
      return time_;
    }
    /**
     * <pre>
     * Timestamp; when payment request created
     * </pre>
     *
     * <code>required uint64 time = 3;</code>
     * @param value The time to set.
     */
    private void setTime(long value) {
      bitField0_ |= 0x00000002;
      time_ = value;
    }
    /**
     * <pre>
     * Timestamp; when payment request created
     * </pre>
     *
     * <code>required uint64 time = 3;</code>
     */
    private void clearTime() {
      bitField0_ = (bitField0_ & ~0x00000002);
      time_ = 0L;
    }

    public static final int EXPIRES_FIELD_NUMBER = 4;
    private long expires_;
    /**
     * <pre>
     * Timestamp; when this request should be considered invalid
     * </pre>
     *
     * <code>optional uint64 expires = 4;</code>
     * @return Whether the expires field is set.
     */
    @java.lang.Override
    public boolean hasExpires() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * Timestamp; when this request should be considered invalid
     * </pre>
     *
     * <code>optional uint64 expires = 4;</code>
     * @return The expires.
     */
    @java.lang.Override
    public long getExpires() {
      return expires_;
    }
    /**
     * <pre>
     * Timestamp; when this request should be considered invalid
     * </pre>
     *
     * <code>optional uint64 expires = 4;</code>
     * @param value The expires to set.
     */
    private void setExpires(long value) {
      bitField0_ |= 0x00000004;
      expires_ = value;
    }
    /**
     * <pre>
     * Timestamp; when this request should be considered invalid
     * </pre>
     *
     * <code>optional uint64 expires = 4;</code>
     */
    private void clearExpires() {
      bitField0_ = (bitField0_ & ~0x00000004);
      expires_ = 0L;
    }

    public static final int MEMO_FIELD_NUMBER = 5;
    private java.lang.String memo_;
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @return Whether the memo field is set.
     */
    @java.lang.Override
    public boolean hasMemo() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @return The memo.
     */
    @java.lang.Override
    public java.lang.String getMemo() {
      return memo_;
    }
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @return The bytes for memo.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMemoBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(memo_);
    }
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @param value The memo to set.
     */
    private void setMemo(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000008;
      memo_ = value;
    }
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     */
    private void clearMemo() {
      bitField0_ = (bitField0_ & ~0x00000008);
      memo_ = getDefaultInstance().getMemo();
    }
    /**
     * <pre>
     * Human-readable description of request for the customer
     * </pre>
     *
     * <code>optional string memo = 5;</code>
     * @param value The bytes for memo to set.
     */
    private void setMemoBytes(
        com.google.protobuf.ByteString value) {
      memo_ = value.toStringUtf8();
      bitField0_ |= 0x00000008;
    }

    public static final int PAYMENT_URL_FIELD_NUMBER = 6;
    private java.lang.String paymentUrl_;
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @return Whether the paymentUrl field is set.
     */
    @java.lang.Override
    public boolean hasPaymentUrl() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @return The paymentUrl.
     */
    @java.lang.Override
    public java.lang.String getPaymentUrl() {
      return paymentUrl_;
    }
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @return The bytes for paymentUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPaymentUrlBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(paymentUrl_);
    }
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @param value The paymentUrl to set.
     */
    private void setPaymentUrl(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000010;
      paymentUrl_ = value;
    }
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     */
    private void clearPaymentUrl() {
      bitField0_ = (bitField0_ & ~0x00000010);
      paymentUrl_ = getDefaultInstance().getPaymentUrl();
    }
    /**
     * <pre>
     * URL to send Payment and get PaymentACK
     * </pre>
     *
     * <code>optional string payment_url = 6;</code>
     * @param value The bytes for paymentUrl to set.
     */
    private void setPaymentUrlBytes(
        com.google.protobuf.ByteString value) {
      paymentUrl_ = value.toStringUtf8();
      bitField0_ |= 0x00000010;
    }

    public static final int MERCHANT_DATA_FIELD_NUMBER = 7;
    private com.google.protobuf.ByteString merchantData_;
    /**
     * <pre>
     * Arbitrary data to include in the Payment message
     * </pre>
     *
     * <code>optional bytes merchant_data = 7;</code>
     * @return Whether the merchantData field is set.
     */
    @java.lang.Override
    public boolean hasMerchantData() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * Arbitrary data to include in the Payment message
     * </pre>
     *
     * <code>optional bytes merchant_data = 7;</code>
     * @return The merchantData.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getMerchantData() {
      return merchantData_;
    }
    /**
     * <pre>
     * Arbitrary data to include in the Payment message
     * </pre>
     *
     * <code>optional bytes merchant_data = 7;</code>
     * @param value The merchantData to set.
     */
    private void setMerchantData(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000020;
      merchantData_ = value;
    }
    /**
     * <pre>
     * Arbitrary data to include in the Payment message
     * </pre>
     *
     * <code>optional bytes merchant_data = 7;</code>
     */
    private void clearMerchantData() {
      bitField0_ = (bitField0_ & ~0x00000020);
      merchantData_ = getDefaultInstance().getMerchantData();
    }

    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(org.bitcoin.protocols.payments.Protos.PaymentDetails prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code payments.PaymentDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          org.bitcoin.protocols.payments.Protos.PaymentDetails, Builder> implements
        // @@protoc_insertion_point(builder_implements:payments.PaymentDetails)
        org.bitcoin.protocols.payments.Protos.PaymentDetailsOrBuilder {
      // Construct using org.bitcoin.protocols.payments.Protos.PaymentDetails.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <pre>
       * "main" or "test"
       * </pre>
       *
       * <code>optional string network = 1 [default = "main"];</code>
       * @return Whether the network field is set.
       */
      @java.lang.Override
      public boolean hasNetwork() {
        return instance.hasNetwork();
      }
      /**
       * <pre>
       * "main" or "test"
       * </pre>
       *
       * <code>optional string network = 1 [default = "main"];</code>
       * @return The network.
       */
      @java.lang.Override
      public java.lang.String getNetwork() {
        return instance.getNetwork();
      }
      /**
       * <pre>
       * "main" or "test"
       * </pre>
       *
       * <code>optional string network = 1 [default = "main"];</code>
       * @return The bytes for network.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getNetworkBytes() {
        return instance.getNetworkBytes();
      }
      /**
       * <pre>
       * "main" or "test"
       * </pre>
       *
       * <code>optional string network = 1 [default = "main"];</code>
       * @param value The network to set.
       * @return This builder for chaining.
       */
      public Builder setNetwork(
          java.lang.String value) {
        copyOnWrite();
        instance.setNetwork(value);
        return this;
      }
      /**
       * <pre>
       * "main" or "test"
       * </pre>
       *
       * <code>optional string network = 1 [default = "main"];</code>
       * @return This builder for chaining.
       */
      public Builder clearNetwork() {
        copyOnWrite();
        instance.clearNetwork();
        return this;
      }
      /**
       * <pre>
       * "main" or "test"
       * </pre>
       *
       * <code>optional string network = 1 [default = "main"];</code>
       * @param value The bytes for network to set.
       * @return This builder for chaining.
       */
      public Builder setNetworkBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setNetworkBytes(value);
        return this;
      }

      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      @java.lang.Override
      public java.util.List<org.bitcoin.protocols.payments.Protos.Output> getOutputsList() {
        return java.util.Collections.unmodifiableList(
            instance.getOutputsList());
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      @java.lang.Override
      public int getOutputsCount() {
        return instance.getOutputsCount();
      }/**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      @java.lang.Override
      public org.bitcoin.protocols.payments.Protos.Output getOutputs(int index) {
        return instance.getOutputs(index);
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder setOutputs(
          int index, org.bitcoin.protocols.payments.Protos.Output value) {
        copyOnWrite();
        instance.setOutputs(index, value);
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder setOutputs(
          int index, org.bitcoin.protocols.payments.Protos.Output.Builder builderForValue) {
        copyOnWrite();
        instance.setOutputs(index,
            builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder addOutputs(org.bitcoin.protocols.payments.Protos.Output value) {
        copyOnWrite();
        instance.addOutputs(value);
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder addOutputs(
          int index, org.bitcoin.protocols.payments.Protos.Output value) {
        copyOnWrite();
        instance.addOutputs(index, value);
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder addOutputs(
          org.bitcoin.protocols.payments.Protos.Output.Builder builderForValue) {
        copyOnWrite();
        instance.addOutputs(builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder addOutputs(
          int index, org.bitcoin.protocols.payments.Protos.Output.Builder builderForValue) {
        copyOnWrite();
        instance.addOutputs(index,
            builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder addAllOutputs(
          java.lang.Iterable<? extends org.bitcoin.protocols.payments.Protos.Output> values) {
        copyOnWrite();
        instance.addAllOutputs(values);
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder clearOutputs() {
        copyOnWrite();
        instance.clearOutputs();
        return this;
      }
      /**
       * <pre>
       * Where payment should be sent
       * </pre>
       *
       * <code>repeated .payments.Output outputs = 2;</code>
       */
      public Builder removeOutputs(int index) {
        copyOnWrite();
        instance.removeOutputs(index);
        return this;
      }

      /**
       * <pre>
       * Timestamp; when payment request created
       * </pre>
       *
       * <code>required uint64 time = 3;</code>
       * @return Whether the time field is set.
       */
      @java.lang.Override
      public boolean hasTime() {
        return instance.hasTime();
      }
      /**
       * <pre>
       * Timestamp; when payment request created
       * </pre>
       *
       * <code>required uint64 time = 3;</code>
       * @return The time.
       */
      @java.lang.Override
      public long getTime() {
        return instance.getTime();
      }
      /**
       * <pre>
       * Timestamp; when payment request created
       * </pre>
       *
       * <code>required uint64 time = 3;</code>
       * @param value The time to set.
       * @return This builder for chaining.
       */
      public Builder setTime(long value) {
        copyOnWrite();
        instance.setTime(value);
        return this;
      }
      /**
       * <pre>
       * Timestamp; when payment request created
       * </pre>
       *
       * <code>required uint64 time = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearTime() {
        copyOnWrite();
        instance.clearTime();
        return this;
      }

      /**
       * <pre>
       * Timestamp; when this request should be considered invalid
       * </pre>
       *
       * <code>optional uint64 expires = 4;</code>
       * @return Whether the expires field is set.
       */
      @java.lang.Override
      public boolean hasExpires() {
        return instance.hasExpires();
      }
      /**
       * <pre>
       * Timestamp; when this request should be considered invalid
       * </pre>
       *
       * <code>optional uint64 expires = 4;</code>
       * @return The expires.
       */
      @java.lang.Override
      public long getExpires() {
        return instance.getExpires();
      }
      /**
       * <pre>
       * Timestamp; when this request should be considered invalid
       * </pre>
       *
       * <code>optional uint64 expires = 4;</code>
       * @param value The expires to set.
       * @return This builder for chaining.
       */
      public Builder setExpires(long value) {
        copyOnWrite();
        instance.setExpires(value);
        return this;
      }
      /**
       * <pre>
       * Timestamp; when this request should be considered invalid
       * </pre>
       *
       * <code>optional uint64 expires = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearExpires() {
        copyOnWrite();
        instance.clearExpires();
        return this;
      }

      /**
       * <pre>
       * Human-readable description of request for the customer
       * </pre>
       *
       * <code>optional string memo = 5;</code>
       * @return Whether the memo field is set.
       */
      @java.lang.Override
      public boolean hasMemo() {
        return instance.hasMemo();
      }
      /**
       * <pre>
       * Human-readable description of request for the customer
       * </pre>
       *
       * <code>optional string memo = 5;</code>
       * @return The memo.
       */
      @java.lang.Override
      public java.lang.String getMemo() {
        return instance.getMemo();
      }
      /**
       * <pre>
       * Human-readable description of request for the customer
       * </pre>
       *
       * <code>optional string memo = 5;</code>
       * @return The bytes for memo.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getMemoBytes() {
        return instance.getMemoBytes();
      }
      /**
       * <pre>
       * Human-readable description of request for the customer
       * </pre>
       *
       * <code>optional string memo = 5;</code>
       * @param value The memo to set.
       * @return This builder for chaining.
       */
      public Builder setMemo(
          java.lang.String value) {
        copyOnWrite();
        instance.setMemo(value);
        return this;
      }
      /**
       * <pre>
       * Human-readable description of request for the customer
       * </pre>
       *
       * <code>optional string memo = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearMemo() {
        copyOnWrite();
        instance.clearMemo();
        return this;
      }
      /**
       * <pre>
       * Human-readable description of request for the customer
       * </pre>
       *
       * <code>optional string memo = 5;</code>
       * @param value The bytes for memo to set.
       * @return This builder for chaining.
       */
      public Builder setMemoBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setMemoBytes(value);
        return this;
      }

      /**
       * <pre>
       * URL to send Payment and get PaymentACK
       * </pre>
       *
       * <code>optional string payment_url = 6;</code>
       * @return Whether the paymentUrl field is set.
       */
      @java.lang.Override
      public boolean hasPaymentUrl() {
        return instance.hasPaymentUrl();
      }
      /**
       * <pre>
       * URL to send Payment and get PaymentACK
       * </pre>
       *
       * <code>optional string payment_url = 6;</code>
       * @return The paymentUrl.
       */
      @java.lang.Override
      public java.lang.String getPaymentUrl() {
        return instance.getPaymentUrl();
      }
      /**
       * <pre>
       * URL to send Payment and get PaymentACK
       * </pre>
       *
       * <code>optional string payment_url = 6;</code>
       * @return The bytes for paymentUrl.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getPaymentUrlBytes() {
        return instance.getPaymentUrlBytes();
      }
      /**
       * <pre>
       * URL to send Payment and get PaymentACK
       * </pre>
       *
       * <code>optional string payment_url = 6;</code>
       * @param value The paymentUrl to set.
       * @return This builder for chaining.
       */
      public Builder setPaymentUrl(
          java.lang.String value) {
        copyOnWrite();
        instance.setPaymentUrl(value);
        return this;
      }
      /**
       * <pre>
       * URL to send Payment and get PaymentACK
       * </pre>
       *
       * <code>optional string payment_url = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearPaymentUrl() {
        copyOnWrite();
        instance.clearPaymentUrl();
        return this;
      }
      /**
       * <pre>
       * URL to send Payment and get PaymentACK
       * </pre>
       *
       * <code>optional string payment_url = 6;</code>
       * @param value The bytes for paymentUrl to set.
       * @return This builder for chaining.
       */
      public Builder setPaymentUrlBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setPaymentUrlBytes(value);
        return this;
      }

      /**
       * <pre>
       * Arbitrary data to include in the Payment message
       * </pre>
       *
       * <code>optional bytes merchant_data = 7;</code>
       * @return Whether the merchantData field is set.
       */
      @java.lang.Override
      public boolean hasMerchantData() {
        return instance.hasMerchantData();
      }
      /**
       * <pre>
       * Arbitrary data to include in the Payment message
       * </pre>
       *
       * <code>optional bytes merchant_data = 7;</code>
       * @return The merchantData.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getMerchantData() {
        return instance.getMerchantData();
      }
      /**
       * <pre>
       * Arbitrary data to include in the Payment message
       * </pre>
       *
       * <code>optional bytes merchant_data = 7;</code>
       * @param value The merchantData to set.
       * @return This builder for chaining.
       */
      public Builder setMerchantData(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setMerchantData(value);
        return this;
      }
      /**
       * <pre>
       * Arbitrary data to include in the Payment message
       * </pre>
       *
       * <code>optional bytes merchant_data = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearMerchantData() {
        copyOnWrite();
        instance.clearMerchantData();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:payments.PaymentDetails)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new org.bitcoin.protocols.payments.Protos.PaymentDetails();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "network_",
              "outputs_",
              org.bitcoin.protocols.payments.Protos.Output.class,
              "time_",
              "expires_",
              "memo_",
              "paymentUrl_",
              "merchantData_",
            };
            java.lang.String info =
                "\u0001\u0007\u0000\u0001\u0001\u0007\u0007\u0000\u0001\u0002\u0001\u1008\u0000\u0002" +
                "\u041b\u0003\u1503\u0001\u0004\u1003\u0002\u0005\u1008\u0003\u0006\u1008\u0004\u0007" +
                "\u100a\u0005";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<org.bitcoin.protocols.payments.Protos.PaymentDetails> parser = PARSER;
          if (parser == null) {
            synchronized (org.bitcoin.protocols.payments.Protos.PaymentDetails.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<org.bitcoin.protocols.payments.Protos.PaymentDetails>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:payments.PaymentDetails)
    private static final org.bitcoin.protocols.payments.Protos.PaymentDetails DEFAULT_INSTANCE;
    static {
      PaymentDetails defaultInstance = new PaymentDetails();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        PaymentDetails.class, defaultInstance);
    }

    public static org.bitcoin.protocols.payments.Protos.PaymentDetails getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<PaymentDetails> PARSER;

    public static com.google.protobuf.Parser<PaymentDetails> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface PaymentRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:payments.PaymentRequest)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
     * @return Whether the paymentDetailsVersion field is set.
     */
    boolean hasPaymentDetailsVersion();
    /**
     * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
     * @return The paymentDetailsVersion.
     */
    int getPaymentDetailsVersion();

    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @return Whether the pkiType field is set.
     */
    boolean hasPkiType();
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @return The pkiType.
     */
    java.lang.String getPkiType();
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @return The bytes for pkiType.
     */
    com.google.protobuf.ByteString
        getPkiTypeBytes();

    /**
     * <pre>
     * depends on pki_type
     * </pre>
     *
     * <code>optional bytes pki_data = 3;</code>
     * @return Whether the pkiData field is set.
     */
    boolean hasPkiData();
    /**
     * <pre>
     * depends on pki_type
     * </pre>
     *
     * <code>optional bytes pki_data = 3;</code>
     * @return The pkiData.
     */
    com.google.protobuf.ByteString getPkiData();

    /**
     * <pre>
     * PaymentDetails
     * </pre>
     *
     * <code>required bytes serialized_payment_details = 4;</code>
     * @return Whether the serializedPaymentDetails field is set.
     */
    boolean hasSerializedPaymentDetails();
    /**
     * <pre>
     * PaymentDetails
     * </pre>
     *
     * <code>required bytes serialized_payment_details = 4;</code>
     * @return The serializedPaymentDetails.
     */
    com.google.protobuf.ByteString getSerializedPaymentDetails();

    /**
     * <pre>
     * pki-dependent signature
     * </pre>
     *
     * <code>optional bytes signature = 5;</code>
     * @return Whether the signature field is set.
     */
    boolean hasSignature();
    /**
     * <pre>
     * pki-dependent signature
     * </pre>
     *
     * <code>optional bytes signature = 5;</code>
     * @return The signature.
     */
    com.google.protobuf.ByteString getSignature();
  }
  /**
   * Protobuf type {@code payments.PaymentRequest}
   */
  public  static final class PaymentRequest extends
      com.google.protobuf.GeneratedMessageLite<
          PaymentRequest, PaymentRequest.Builder> implements
      // @@protoc_insertion_point(message_implements:payments.PaymentRequest)
      PaymentRequestOrBuilder {
    private PaymentRequest() {
      paymentDetailsVersion_ = 1;
      pkiType_ = "none";
      pkiData_ = com.google.protobuf.ByteString.EMPTY;
      serializedPaymentDetails_ = com.google.protobuf.ByteString.EMPTY;
      signature_ = com.google.protobuf.ByteString.EMPTY;
    }
    private int bitField0_;
    public static final int PAYMENT_DETAILS_VERSION_FIELD_NUMBER = 1;
    private int paymentDetailsVersion_;
    /**
     * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
     * @return Whether the paymentDetailsVersion field is set.
     */
    @java.lang.Override
    public boolean hasPaymentDetailsVersion() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
     * @return The paymentDetailsVersion.
     */
    @java.lang.Override
    public int getPaymentDetailsVersion() {
      return paymentDetailsVersion_;
    }
    /**
     * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
     * @param value The paymentDetailsVersion to set.
     */
    private void setPaymentDetailsVersion(int value) {
      bitField0_ |= 0x00000001;
      paymentDetailsVersion_ = value;
    }
    /**
     * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
     */
    private void clearPaymentDetailsVersion() {
      bitField0_ = (bitField0_ & ~0x00000001);
      paymentDetailsVersion_ = 1;
    }

    public static final int PKI_TYPE_FIELD_NUMBER = 2;
    private java.lang.String pkiType_;
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @return Whether the pkiType field is set.
     */
    @java.lang.Override
    public boolean hasPkiType() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @return The pkiType.
     */
    @java.lang.Override
    public java.lang.String getPkiType() {
      return pkiType_;
    }
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @return The bytes for pkiType.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPkiTypeBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(pkiType_);
    }
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @param value The pkiType to set.
     */
    private void setPkiType(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000002;
      pkiType_ = value;
    }
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     */
    private void clearPkiType() {
      bitField0_ = (bitField0_ & ~0x00000002);
      pkiType_ = getDefaultInstance().getPkiType();
    }
    /**
     * <pre>
     * none / x509+sha256 / x509+sha1
     * </pre>
     *
     * <code>optional string pki_type = 2 [default = "none"];</code>
     * @param value The bytes for pkiType to set.
     */
    private void setPkiTypeBytes(
        com.google.protobuf.ByteString value) {
      pkiType_ = value.toStringUtf8();
      bitField0_ |= 0x00000002;
    }

    public static final int PKI_DATA_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString pkiData_;
    /**
     * <pre>
     * depends on pki_type
     * </pre>
     *
     * <code>optional bytes pki_data = 3;</code>
     * @return Whether the pkiData field is set.
     */
    @java.lang.Override
    public boolean hasPkiData() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * depends on pki_type
     * </pre>
     *
     * <code>optional bytes pki_data = 3;</code>
     * @return The pkiData.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getPkiData() {
      return pkiData_;
    }
    /**
     * <pre>
     * depends on pki_type
     * </pre>
     *
     * <code>optional bytes pki_data = 3;</code>
     * @param value The pkiData to set.
     */
    private void setPkiData(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000004;
      pkiData_ = value;
    }
    /**
     * <pre>
     * depends on pki_type
     * </pre>
     *
     * <code>optional bytes pki_data = 3;</code>
     */
    private void clearPkiData() {
      bitField0_ = (bitField0_ & ~0x00000004);
      pkiData_ = getDefaultInstance().getPkiData();
    }

    public static final int SERIALIZED_PAYMENT_DETAILS_FIELD_NUMBER = 4;
    private com.google.protobuf.ByteString serializedPaymentDetails_;
    /**
     * <pre>
     * PaymentDetails
     * </pre>
     *
     * <code>required bytes serialized_payment_details = 4;</code>
     * @return Whether the serializedPaymentDetails field is set.
     */
    @java.lang.Override
    public boolean hasSerializedPaymentDetails() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * PaymentDetails
     * </pre>
     *
     * <code>required bytes serialized_payment_details = 4;</code>
     * @return The serializedPaymentDetails.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getSerializedPaymentDetails() {
      return serializedPaymentDetails_;
    }
    /**
     * <pre>
     * PaymentDetails
     * </pre>
     *
     * <code>required bytes serialized_payment_details = 4;</code>
     * @param value The serializedPaymentDetails to set.
     */
    private void setSerializedPaymentDetails(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000008;
      serializedPaymentDetails_ = value;
    }
    /**
     * <pre>
     * PaymentDetails
     * </pre>
     *
     * <code>required bytes serialized_payment_details = 4;</code>
     */
    private void clearSerializedPaymentDetails() {
      bitField0_ = (bitField0_ & ~0x00000008);
      serializedPaymentDetails_ = getDefaultInstance().getSerializedPaymentDetails();
    }

    public static final int SIGNATURE_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString signature_;
    /**
     * <pre>
     * pki-dependent signature
     * </pre>
     *
     * <code>optional bytes signature = 5;</code>
     * @return Whether the signature field is set.
     */
    @java.lang.Override
    public boolean hasSignature() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * pki-dependent signature
     * </pre>
     *
     * <code>optional bytes signature = 5;</code>
     * @return The signature.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getSignature() {
      return signature_;
    }
    /**
     * <pre>
     * pki-dependent signature
     * </pre>
     *
     * <code>optional bytes signature = 5;</code>
     * @param value The signature to set.
     */
    private void setSignature(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000010;
      signature_ = value;
    }
    /**
     * <pre>
     * pki-dependent signature
     * </pre>
     *
     * <code>optional bytes signature = 5;</code>
     */
    private void clearSignature() {
      bitField0_ = (bitField0_ & ~0x00000010);
      signature_ = getDefaultInstance().getSignature();
    }

    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(org.bitcoin.protocols.payments.Protos.PaymentRequest prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code payments.PaymentRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          org.bitcoin.protocols.payments.Protos.PaymentRequest, Builder> implements
        // @@protoc_insertion_point(builder_implements:payments.PaymentRequest)
        org.bitcoin.protocols.payments.Protos.PaymentRequestOrBuilder {
      // Construct using org.bitcoin.protocols.payments.Protos.PaymentRequest.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
       * @return Whether the paymentDetailsVersion field is set.
       */
      @java.lang.Override
      public boolean hasPaymentDetailsVersion() {
        return instance.hasPaymentDetailsVersion();
      }
      /**
       * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
       * @return The paymentDetailsVersion.
       */
      @java.lang.Override
      public int getPaymentDetailsVersion() {
        return instance.getPaymentDetailsVersion();
      }
      /**
       * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
       * @param value The paymentDetailsVersion to set.
       * @return This builder for chaining.
       */
      public Builder setPaymentDetailsVersion(int value) {
        copyOnWrite();
        instance.setPaymentDetailsVersion(value);
        return this;
      }
      /**
       * <code>optional uint32 payment_details_version = 1 [default = 1];</code>
       * @return This builder for chaining.
       */
      public Builder clearPaymentDetailsVersion() {
        copyOnWrite();
        instance.clearPaymentDetailsVersion();
        return this;
      }

      /**
       * <pre>
       * none / x509+sha256 / x509+sha1
       * </pre>
       *
       * <code>optional string pki_type = 2 [default = "none"];</code>
       * @return Whether the pkiType field is set.
       */
      @java.lang.Override
      public boolean hasPkiType() {
        return instance.hasPkiType();
      }
      /**
       * <pre>
       * none / x509+sha256 / x509+sha1
       * </pre>
       *
       * <code>optional string pki_type = 2 [default = "none"];</code>
       * @return The pkiType.
       */
      @java.lang.Override
      public java.lang.String getPkiType() {
        return instance.getPkiType();
      }
      /**
       * <pre>
       * none / x509+sha256 / x509+sha1
       * </pre>
       *
       * <code>optional string pki_type = 2 [default = "none"];</code>
       * @return The bytes for pkiType.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getPkiTypeBytes() {
        return instance.getPkiTypeBytes();
      }
      /**
       * <pre>
       * none / x509+sha256 / x509+sha1
       * </pre>
       *
       * <code>optional string pki_type = 2 [default = "none"];</code>
       * @param value The pkiType to set.
       * @return This builder for chaining.
       */
      public Builder setPkiType(
          java.lang.String value) {
        copyOnWrite();
        instance.setPkiType(value);
        return this;
      }
      /**
       * <pre>
       * none / x509+sha256 / x509+sha1
       * </pre>
       *
       * <code>optional string pki_type = 2 [default = "none"];</code>
       * @return This builder for chaining.
       */
      public Builder clearPkiType() {
        copyOnWrite();
        instance.clearPkiType();
        return this;
      }
      /**
       * <pre>
       * none / x509+sha256 / x509+sha1
       * </pre>
       *
       * <code>optional string pki_type = 2 [default = "none"];</code>
       * @param value The bytes for pkiType to set.
       * @return This builder for chaining.
       */
      public Builder setPkiTypeBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setPkiTypeBytes(value);
        return this;
      }

      /**
       * <pre>
       * depends on pki_type
       * </pre>
       *
       * <code>optional bytes pki_data = 3;</code>
       * @return Whether the pkiData field is set.
       */
      @java.lang.Override
      public boolean hasPkiData() {
        return instance.hasPkiData();
      }
      /**
       * <pre>
       * depends on pki_type
       * </pre>
       *
       * <code>optional bytes pki_data = 3;</code>
       * @return The pkiData.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getPkiData() {
        return instance.getPkiData();
      }
      /**
       * <pre>
       * depends on pki_type
       * </pre>
       *
       * <code>optional bytes pki_data = 3;</code>
       * @param value The pkiData to set.
       * @return This builder for chaining.
       */
      public Builder setPkiData(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setPkiData(value);
        return this;
      }
      /**
       * <pre>
       * depends on pki_type
       * </pre>
       *
       * <code>optional bytes pki_data = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearPkiData() {
        copyOnWrite();
        instance.clearPkiData();
        return this;
      }

      /**
       * <pre>
       * PaymentDetails
       * </pre>
       *
       * <code>required bytes serialized_payment_details = 4;</code>
       * @return Whether the serializedPaymentDetails field is set.
       */
      @java.lang.Override
      public boolean hasSerializedPaymentDetails() {
        return instance.hasSerializedPaymentDetails();
      }
      /**
       * <pre>
       * PaymentDetails
       * </pre>
       *
       * <code>required bytes serialized_payment_details = 4;</code>
       * @return The serializedPaymentDetails.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getSerializedPaymentDetails() {
        return instance.getSerializedPaymentDetails();
      }
      /**
       * <pre>
       * PaymentDetails
       * </pre>
       *
       * <code>required bytes serialized_payment_details = 4;</code>
       * @param value The serializedPaymentDetails to set.
       * @return This builder for chaining.
       */
      public Builder setSerializedPaymentDetails(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setSerializedPaymentDetails(value);
        return this;
      }
      /**
       * <pre>
       * PaymentDetails
       * </pre>
       *
       * <code>required bytes serialized_payment_details = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearSerializedPaymentDetails() {
        copyOnWrite();
        instance.clearSerializedPaymentDetails();
        return this;
      }

      /**
       * <pre>
       * pki-dependent signature
       * </pre>
       *
       * <code>optional bytes signature = 5;</code>
       * @return Whether the signature field is set.
       */
      @java.lang.Override
      public boolean hasSignature() {
        return instance.hasSignature();
      }
      /**
       * <pre>
       * pki-dependent signature
       * </pre>
       *
       * <code>optional bytes signature = 5;</code>
       * @return The signature.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getSignature() {
        return instance.getSignature();
      }
      /**
       * <pre>
       * pki-dependent signature
       * </pre>
       *
       * <code>optional bytes signature = 5;</code>
       * @param value The signature to set.
       * @return This builder for chaining.
       */
      public Builder setSignature(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setSignature(value);
        return this;
      }
      /**
       * <pre>
       * pki-dependent signature
       * </pre>
       *
       * <code>optional bytes signature = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearSignature() {
        copyOnWrite();
        instance.clearSignature();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:payments.PaymentRequest)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new org.bitcoin.protocols.payments.Protos.PaymentRequest();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "paymentDetailsVersion_",
              "pkiType_",
              "pkiData_",
              "serializedPaymentDetails_",
              "signature_",
            };
            java.lang.String info =
                "\u0001\u0005\u0000\u0001\u0001\u0005\u0005\u0000\u0000\u0001\u0001\u100b\u0000\u0002" +
                "\u1008\u0001\u0003\u100a\u0002\u0004\u150a\u0003\u0005\u100a\u0004";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<org.bitcoin.protocols.payments.Protos.PaymentRequest> parser = PARSER;
          if (parser == null) {
            synchronized (org.bitcoin.protocols.payments.Protos.PaymentRequest.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<org.bitcoin.protocols.payments.Protos.PaymentRequest>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:payments.PaymentRequest)
    private static final org.bitcoin.protocols.payments.Protos.PaymentRequest DEFAULT_INSTANCE;
    static {
      PaymentRequest defaultInstance = new PaymentRequest();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        PaymentRequest.class, defaultInstance);
    }

    public static org.bitcoin.protocols.payments.Protos.PaymentRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<PaymentRequest> PARSER;

    public static com.google.protobuf.Parser<PaymentRequest> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface X509CertificatesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:payments.X509Certificates)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @return A list containing the certificate.
     */
    java.util.List<com.google.protobuf.ByteString> getCertificateList();
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @return The count of certificate.
     */
    int getCertificateCount();
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @param index The index of the element to return.
     * @return The certificate at the given index.
     */
    com.google.protobuf.ByteString getCertificate(int index);
  }
  /**
   * Protobuf type {@code payments.X509Certificates}
   */
  public  static final class X509Certificates extends
      com.google.protobuf.GeneratedMessageLite<
          X509Certificates, X509Certificates.Builder> implements
      // @@protoc_insertion_point(message_implements:payments.X509Certificates)
      X509CertificatesOrBuilder {
    private X509Certificates() {
      certificate_ = emptyProtobufList();
    }
    public static final int CERTIFICATE_FIELD_NUMBER = 1;
    private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> certificate_;
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @return A list containing the certificate.
     */
    @java.lang.Override
    public java.util.List<com.google.protobuf.ByteString>
        getCertificateList() {
      return certificate_;
    }
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @return The count of certificate.
     */
    @java.lang.Override
    public int getCertificateCount() {
      return certificate_.size();
    }
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @param index The index of the element to return.
     * @return The certificate at the given index.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getCertificate(int index) {
      return certificate_.get(index);
    }
    private void ensureCertificateIsMutable() {
      com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> tmp = certificate_;
      if (!tmp.isModifiable()) {
        certificate_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @param index The index to set the value at.
     * @param value The certificate to set.
     */
    private void setCertificate(
        int index, com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  ensureCertificateIsMutable();
      certificate_.set(index, value);
    }
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @param value The certificate to add.
     */
    private void addCertificate(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  ensureCertificateIsMutable();
      certificate_.add(value);
    }
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     * @param values The certificate to add.
     */
    private void addAllCertificate(
        java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
      ensureCertificateIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, certificate_);
    }
    /**
     * <pre>
     * DER-encoded X.509 certificate chain
     * </pre>
     *
     * <code>repeated bytes certificate = 1;</code>
     */
    private void clearCertificate() {
      certificate_ = emptyProtobufList();
    }

    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.X509Certificates parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(org.bitcoin.protocols.payments.Protos.X509Certificates prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code payments.X509Certificates}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          org.bitcoin.protocols.payments.Protos.X509Certificates, Builder> implements
        // @@protoc_insertion_point(builder_implements:payments.X509Certificates)
        org.bitcoin.protocols.payments.Protos.X509CertificatesOrBuilder {
      // Construct using org.bitcoin.protocols.payments.Protos.X509Certificates.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <pre>
       * DER-encoded X.509 certificate chain
       * </pre>
       *
       * <code>repeated bytes certificate = 1;</code>
       * @return A list containing the certificate.
       */
      @java.lang.Override
      public java.util.List<com.google.protobuf.ByteString>
          getCertificateList() {
        return java.util.Collections.unmodifiableList(
            instance.getCertificateList());
      }
      /**
       * <pre>
       * DER-encoded X.509 certificate chain
       * </pre>
       *
       * <code>repeated bytes certificate = 1;</code>
       * @return The count of certificate.
       */
      @java.lang.Override
      public int getCertificateCount() {
        return instance.getCertificateCount();
      }
      /**
       * <pre>
       * DER-encoded X.509 certificate chain
       * </pre>
       *
       * <code>repeated bytes certificate = 1;</code>
       * @param index The index of the element to return.
       * @return The certificate at the given index.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getCertificate(int index) {
        return instance.getCertificate(index);
      }
      /**
       * <pre>
       * DER-encoded X.509 certificate chain
       * </pre>
       *
       * <code>repeated bytes certificate = 1;</code>
       * @param value The certificate to set.
       * @return This builder for chaining.
       */
      public Builder setCertificate(
          int index, com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setCertificate(index, value);
        return this;
      }
      /**
       * <pre>
       * DER-encoded X.509 certificate chain
       * </pre>
       *
       * <code>repeated bytes certificate = 1;</code>
       * @param value The certificate to add.
       * @return This builder for chaining.
       */
      public Builder addCertificate(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.addCertificate(value);
        return this;
      }
      /**
       * <pre>
       * DER-encoded X.509 certificate chain
       * </pre>
       *
       * <code>repeated bytes certificate = 1;</code>
       * @param values The certificate to add.
       * @return This builder for chaining.
       */
      public Builder addAllCertificate(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        copyOnWrite();
        instance.addAllCertificate(values);
        return this;
      }
      /**
       * <pre>
       * DER-encoded X.509 certificate chain
       * </pre>
       *
       * <code>repeated bytes certificate = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCertificate() {
        copyOnWrite();
        instance.clearCertificate();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:payments.X509Certificates)
    }
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new org.bitcoin.protocols.payments.Protos.X509Certificates();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "certificate_",
            };
            java.lang.String info =
                "\u0001\u0001\u0000\u0000\u0001\u0001\u0001\u0000\u0001\u0000\u0001\u001c";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<org.bitcoin.protocols.payments.Protos.X509Certificates> parser = PARSER;
          if (parser == null) {
            synchronized (org.bitcoin.protocols.payments.Protos.X509Certificates.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<org.bitcoin.protocols.payments.Protos.X509Certificates>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return (byte) 1;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:payments.X509Certificates)
    private static final org.bitcoin.protocols.payments.Protos.X509Certificates DEFAULT_INSTANCE;
    static {
      X509Certificates defaultInstance = new X509Certificates();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        X509Certificates.class, defaultInstance);
    }

    public static org.bitcoin.protocols.payments.Protos.X509Certificates getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<X509Certificates> PARSER;

    public static com.google.protobuf.Parser<X509Certificates> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface PaymentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:payments.Payment)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <pre>
     * From PaymentDetails.merchant_data
     * </pre>
     *
     * <code>optional bytes merchant_data = 1;</code>
     * @return Whether the merchantData field is set.
     */
    boolean hasMerchantData();
    /**
     * <pre>
     * From PaymentDetails.merchant_data
     * </pre>
     *
     * <code>optional bytes merchant_data = 1;</code>
     * @return The merchantData.
     */
    com.google.protobuf.ByteString getMerchantData();

    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @return A list containing the transactions.
     */
    java.util.List<com.google.protobuf.ByteString> getTransactionsList();
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @return The count of transactions.
     */
    int getTransactionsCount();
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @param index The index of the element to return.
     * @return The transactions at the given index.
     */
    com.google.protobuf.ByteString getTransactions(int index);

    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    java.util.List<org.bitcoin.protocols.payments.Protos.Output> 
        getRefundToList();
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    org.bitcoin.protocols.payments.Protos.Output getRefundTo(int index);
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    int getRefundToCount();

    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @return Whether the memo field is set.
     */
    boolean hasMemo();
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @return The memo.
     */
    java.lang.String getMemo();
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @return The bytes for memo.
     */
    com.google.protobuf.ByteString
        getMemoBytes();
  }
  /**
   * Protobuf type {@code payments.Payment}
   */
  public  static final class Payment extends
      com.google.protobuf.GeneratedMessageLite<
          Payment, Payment.Builder> implements
      // @@protoc_insertion_point(message_implements:payments.Payment)
      PaymentOrBuilder {
    private Payment() {
      merchantData_ = com.google.protobuf.ByteString.EMPTY;
      transactions_ = emptyProtobufList();
      refundTo_ = emptyProtobufList();
      memo_ = "";
    }
    private int bitField0_;
    public static final int MERCHANT_DATA_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString merchantData_;
    /**
     * <pre>
     * From PaymentDetails.merchant_data
     * </pre>
     *
     * <code>optional bytes merchant_data = 1;</code>
     * @return Whether the merchantData field is set.
     */
    @java.lang.Override
    public boolean hasMerchantData() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * From PaymentDetails.merchant_data
     * </pre>
     *
     * <code>optional bytes merchant_data = 1;</code>
     * @return The merchantData.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getMerchantData() {
      return merchantData_;
    }
    /**
     * <pre>
     * From PaymentDetails.merchant_data
     * </pre>
     *
     * <code>optional bytes merchant_data = 1;</code>
     * @param value The merchantData to set.
     */
    private void setMerchantData(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000001;
      merchantData_ = value;
    }
    /**
     * <pre>
     * From PaymentDetails.merchant_data
     * </pre>
     *
     * <code>optional bytes merchant_data = 1;</code>
     */
    private void clearMerchantData() {
      bitField0_ = (bitField0_ & ~0x00000001);
      merchantData_ = getDefaultInstance().getMerchantData();
    }

    public static final int TRANSACTIONS_FIELD_NUMBER = 2;
    private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> transactions_;
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @return A list containing the transactions.
     */
    @java.lang.Override
    public java.util.List<com.google.protobuf.ByteString>
        getTransactionsList() {
      return transactions_;
    }
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @return The count of transactions.
     */
    @java.lang.Override
    public int getTransactionsCount() {
      return transactions_.size();
    }
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @param index The index of the element to return.
     * @return The transactions at the given index.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getTransactions(int index) {
      return transactions_.get(index);
    }
    private void ensureTransactionsIsMutable() {
      com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> tmp = transactions_;
      if (!tmp.isModifiable()) {
        transactions_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @param index The index to set the value at.
     * @param value The transactions to set.
     */
    private void setTransactions(
        int index, com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  ensureTransactionsIsMutable();
      transactions_.set(index, value);
    }
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @param value The transactions to add.
     */
    private void addTransactions(com.google.protobuf.ByteString value) {
      java.lang.Class<?> valueClass = value.getClass();
  ensureTransactionsIsMutable();
      transactions_.add(value);
    }
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     * @param values The transactions to add.
     */
    private void addAllTransactions(
        java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
      ensureTransactionsIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, transactions_);
    }
    /**
     * <pre>
     * Signed transactions that satisfy PaymentDetails.outputs
     * </pre>
     *
     * <code>repeated bytes transactions = 2;</code>
     */
    private void clearTransactions() {
      transactions_ = emptyProtobufList();
    }

    public static final int REFUND_TO_FIELD_NUMBER = 3;
    private com.google.protobuf.Internal.ProtobufList<org.bitcoin.protocols.payments.Protos.Output> refundTo_;
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    @java.lang.Override
    public java.util.List<org.bitcoin.protocols.payments.Protos.Output> getRefundToList() {
      return refundTo_;
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    public java.util.List<? extends org.bitcoin.protocols.payments.Protos.OutputOrBuilder> 
        getRefundToOrBuilderList() {
      return refundTo_;
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    @java.lang.Override
    public int getRefundToCount() {
      return refundTo_.size();
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    @java.lang.Override
    public org.bitcoin.protocols.payments.Protos.Output getRefundTo(int index) {
      return refundTo_.get(index);
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    public org.bitcoin.protocols.payments.Protos.OutputOrBuilder getRefundToOrBuilder(
        int index) {
      return refundTo_.get(index);
    }
    private void ensureRefundToIsMutable() {
      com.google.protobuf.Internal.ProtobufList<org.bitcoin.protocols.payments.Protos.Output> tmp = refundTo_;
      if (!tmp.isModifiable()) {
        refundTo_ =
            com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp);
       }
    }

    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    private void setRefundTo(
        int index, org.bitcoin.protocols.payments.Protos.Output value) {
      value.getClass();
  ensureRefundToIsMutable();
      refundTo_.set(index, value);
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    private void addRefundTo(org.bitcoin.protocols.payments.Protos.Output value) {
      value.getClass();
  ensureRefundToIsMutable();
      refundTo_.add(value);
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    private void addRefundTo(
        int index, org.bitcoin.protocols.payments.Protos.Output value) {
      value.getClass();
  ensureRefundToIsMutable();
      refundTo_.add(index, value);
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    private void addAllRefundTo(
        java.lang.Iterable<? extends org.bitcoin.protocols.payments.Protos.Output> values) {
      ensureRefundToIsMutable();
      com.google.protobuf.AbstractMessageLite.addAll(
          values, refundTo_);
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    private void clearRefundTo() {
      refundTo_ = emptyProtobufList();
    }
    /**
     * <pre>
     * Where to send refunds, if a refund is necessary
     * </pre>
     *
     * <code>repeated .payments.Output refund_to = 3;</code>
     */
    private void removeRefundTo(int index) {
      ensureRefundToIsMutable();
      refundTo_.remove(index);
    }

    public static final int MEMO_FIELD_NUMBER = 4;
    private java.lang.String memo_;
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @return Whether the memo field is set.
     */
    @java.lang.Override
    public boolean hasMemo() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @return The memo.
     */
    @java.lang.Override
    public java.lang.String getMemo() {
      return memo_;
    }
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @return The bytes for memo.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMemoBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(memo_);
    }
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @param value The memo to set.
     */
    private void setMemo(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000002;
      memo_ = value;
    }
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     */
    private void clearMemo() {
      bitField0_ = (bitField0_ & ~0x00000002);
      memo_ = getDefaultInstance().getMemo();
    }
    /**
     * <pre>
     * Human-readable message for the merchant
     * </pre>
     *
     * <code>optional string memo = 4;</code>
     * @param value The bytes for memo to set.
     */
    private void setMemoBytes(
        com.google.protobuf.ByteString value) {
      memo_ = value.toStringUtf8();
      bitField0_ |= 0x00000002;
    }

    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.Payment parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(org.bitcoin.protocols.payments.Protos.Payment prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code payments.Payment}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          org.bitcoin.protocols.payments.Protos.Payment, Builder> implements
        // @@protoc_insertion_point(builder_implements:payments.Payment)
        org.bitcoin.protocols.payments.Protos.PaymentOrBuilder {
      // Construct using org.bitcoin.protocols.payments.Protos.Payment.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <pre>
       * From PaymentDetails.merchant_data
       * </pre>
       *
       * <code>optional bytes merchant_data = 1;</code>
       * @return Whether the merchantData field is set.
       */
      @java.lang.Override
      public boolean hasMerchantData() {
        return instance.hasMerchantData();
      }
      /**
       * <pre>
       * From PaymentDetails.merchant_data
       * </pre>
       *
       * <code>optional bytes merchant_data = 1;</code>
       * @return The merchantData.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getMerchantData() {
        return instance.getMerchantData();
      }
      /**
       * <pre>
       * From PaymentDetails.merchant_data
       * </pre>
       *
       * <code>optional bytes merchant_data = 1;</code>
       * @param value The merchantData to set.
       * @return This builder for chaining.
       */
      public Builder setMerchantData(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setMerchantData(value);
        return this;
      }
      /**
       * <pre>
       * From PaymentDetails.merchant_data
       * </pre>
       *
       * <code>optional bytes merchant_data = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMerchantData() {
        copyOnWrite();
        instance.clearMerchantData();
        return this;
      }

      /**
       * <pre>
       * Signed transactions that satisfy PaymentDetails.outputs
       * </pre>
       *
       * <code>repeated bytes transactions = 2;</code>
       * @return A list containing the transactions.
       */
      @java.lang.Override
      public java.util.List<com.google.protobuf.ByteString>
          getTransactionsList() {
        return java.util.Collections.unmodifiableList(
            instance.getTransactionsList());
      }
      /**
       * <pre>
       * Signed transactions that satisfy PaymentDetails.outputs
       * </pre>
       *
       * <code>repeated bytes transactions = 2;</code>
       * @return The count of transactions.
       */
      @java.lang.Override
      public int getTransactionsCount() {
        return instance.getTransactionsCount();
      }
      /**
       * <pre>
       * Signed transactions that satisfy PaymentDetails.outputs
       * </pre>
       *
       * <code>repeated bytes transactions = 2;</code>
       * @param index The index of the element to return.
       * @return The transactions at the given index.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getTransactions(int index) {
        return instance.getTransactions(index);
      }
      /**
       * <pre>
       * Signed transactions that satisfy PaymentDetails.outputs
       * </pre>
       *
       * <code>repeated bytes transactions = 2;</code>
       * @param value The transactions to set.
       * @return This builder for chaining.
       */
      public Builder setTransactions(
          int index, com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setTransactions(index, value);
        return this;
      }
      /**
       * <pre>
       * Signed transactions that satisfy PaymentDetails.outputs
       * </pre>
       *
       * <code>repeated bytes transactions = 2;</code>
       * @param value The transactions to add.
       * @return This builder for chaining.
       */
      public Builder addTransactions(com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.addTransactions(value);
        return this;
      }
      /**
       * <pre>
       * Signed transactions that satisfy PaymentDetails.outputs
       * </pre>
       *
       * <code>repeated bytes transactions = 2;</code>
       * @param values The transactions to add.
       * @return This builder for chaining.
       */
      public Builder addAllTransactions(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        copyOnWrite();
        instance.addAllTransactions(values);
        return this;
      }
      /**
       * <pre>
       * Signed transactions that satisfy PaymentDetails.outputs
       * </pre>
       *
       * <code>repeated bytes transactions = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTransactions() {
        copyOnWrite();
        instance.clearTransactions();
        return this;
      }

      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      @java.lang.Override
      public java.util.List<org.bitcoin.protocols.payments.Protos.Output> getRefundToList() {
        return java.util.Collections.unmodifiableList(
            instance.getRefundToList());
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      @java.lang.Override
      public int getRefundToCount() {
        return instance.getRefundToCount();
      }/**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      @java.lang.Override
      public org.bitcoin.protocols.payments.Protos.Output getRefundTo(int index) {
        return instance.getRefundTo(index);
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder setRefundTo(
          int index, org.bitcoin.protocols.payments.Protos.Output value) {
        copyOnWrite();
        instance.setRefundTo(index, value);
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder setRefundTo(
          int index, org.bitcoin.protocols.payments.Protos.Output.Builder builderForValue) {
        copyOnWrite();
        instance.setRefundTo(index,
            builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder addRefundTo(org.bitcoin.protocols.payments.Protos.Output value) {
        copyOnWrite();
        instance.addRefundTo(value);
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder addRefundTo(
          int index, org.bitcoin.protocols.payments.Protos.Output value) {
        copyOnWrite();
        instance.addRefundTo(index, value);
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder addRefundTo(
          org.bitcoin.protocols.payments.Protos.Output.Builder builderForValue) {
        copyOnWrite();
        instance.addRefundTo(builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder addRefundTo(
          int index, org.bitcoin.protocols.payments.Protos.Output.Builder builderForValue) {
        copyOnWrite();
        instance.addRefundTo(index,
            builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder addAllRefundTo(
          java.lang.Iterable<? extends org.bitcoin.protocols.payments.Protos.Output> values) {
        copyOnWrite();
        instance.addAllRefundTo(values);
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder clearRefundTo() {
        copyOnWrite();
        instance.clearRefundTo();
        return this;
      }
      /**
       * <pre>
       * Where to send refunds, if a refund is necessary
       * </pre>
       *
       * <code>repeated .payments.Output refund_to = 3;</code>
       */
      public Builder removeRefundTo(int index) {
        copyOnWrite();
        instance.removeRefundTo(index);
        return this;
      }

      /**
       * <pre>
       * Human-readable message for the merchant
       * </pre>
       *
       * <code>optional string memo = 4;</code>
       * @return Whether the memo field is set.
       */
      @java.lang.Override
      public boolean hasMemo() {
        return instance.hasMemo();
      }
      /**
       * <pre>
       * Human-readable message for the merchant
       * </pre>
       *
       * <code>optional string memo = 4;</code>
       * @return The memo.
       */
      @java.lang.Override
      public java.lang.String getMemo() {
        return instance.getMemo();
      }
      /**
       * <pre>
       * Human-readable message for the merchant
       * </pre>
       *
       * <code>optional string memo = 4;</code>
       * @return The bytes for memo.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getMemoBytes() {
        return instance.getMemoBytes();
      }
      /**
       * <pre>
       * Human-readable message for the merchant
       * </pre>
       *
       * <code>optional string memo = 4;</code>
       * @param value The memo to set.
       * @return This builder for chaining.
       */
      public Builder setMemo(
          java.lang.String value) {
        copyOnWrite();
        instance.setMemo(value);
        return this;
      }
      /**
       * <pre>
       * Human-readable message for the merchant
       * </pre>
       *
       * <code>optional string memo = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearMemo() {
        copyOnWrite();
        instance.clearMemo();
        return this;
      }
      /**
       * <pre>
       * Human-readable message for the merchant
       * </pre>
       *
       * <code>optional string memo = 4;</code>
       * @param value The bytes for memo to set.
       * @return This builder for chaining.
       */
      public Builder setMemoBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setMemoBytes(value);
        return this;
      }

      // @@protoc_insertion_point(builder_scope:payments.Payment)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new org.bitcoin.protocols.payments.Protos.Payment();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "merchantData_",
              "transactions_",
              "refundTo_",
              org.bitcoin.protocols.payments.Protos.Output.class,
              "memo_",
            };
            java.lang.String info =
                "\u0001\u0004\u0000\u0001\u0001\u0004\u0004\u0000\u0002\u0001\u0001\u100a\u0000\u0002" +
                "\u001c\u0003\u041b\u0004\u1008\u0001";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<org.bitcoin.protocols.payments.Protos.Payment> parser = PARSER;
          if (parser == null) {
            synchronized (org.bitcoin.protocols.payments.Protos.Payment.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<org.bitcoin.protocols.payments.Protos.Payment>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:payments.Payment)
    private static final org.bitcoin.protocols.payments.Protos.Payment DEFAULT_INSTANCE;
    static {
      Payment defaultInstance = new Payment();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        Payment.class, defaultInstance);
    }

    public static org.bitcoin.protocols.payments.Protos.Payment getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<Payment> PARSER;

    public static com.google.protobuf.Parser<Payment> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }

  public interface PaymentACKOrBuilder extends
      // @@protoc_insertion_point(interface_extends:payments.PaymentACK)
      com.google.protobuf.MessageLiteOrBuilder {

    /**
     * <pre>
     * Payment message that triggered this ACK
     * </pre>
     *
     * <code>required .payments.Payment payment = 1;</code>
     * @return Whether the payment field is set.
     */
    boolean hasPayment();
    /**
     * <pre>
     * Payment message that triggered this ACK
     * </pre>
     *
     * <code>required .payments.Payment payment = 1;</code>
     * @return The payment.
     */
    org.bitcoin.protocols.payments.Protos.Payment getPayment();

    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @return Whether the memo field is set.
     */
    boolean hasMemo();
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @return The memo.
     */
    java.lang.String getMemo();
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @return The bytes for memo.
     */
    com.google.protobuf.ByteString
        getMemoBytes();
  }
  /**
   * Protobuf type {@code payments.PaymentACK}
   */
  public  static final class PaymentACK extends
      com.google.protobuf.GeneratedMessageLite<
          PaymentACK, PaymentACK.Builder> implements
      // @@protoc_insertion_point(message_implements:payments.PaymentACK)
      PaymentACKOrBuilder {
    private PaymentACK() {
      memo_ = "";
    }
    private int bitField0_;
    public static final int PAYMENT_FIELD_NUMBER = 1;
    private org.bitcoin.protocols.payments.Protos.Payment payment_;
    /**
     * <pre>
     * Payment message that triggered this ACK
     * </pre>
     *
     * <code>required .payments.Payment payment = 1;</code>
     */
    @java.lang.Override
    public boolean hasPayment() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <pre>
     * Payment message that triggered this ACK
     * </pre>
     *
     * <code>required .payments.Payment payment = 1;</code>
     */
    @java.lang.Override
    public org.bitcoin.protocols.payments.Protos.Payment getPayment() {
      return payment_ == null ? org.bitcoin.protocols.payments.Protos.Payment.getDefaultInstance() : payment_;
    }
    /**
     * <pre>
     * Payment message that triggered this ACK
     * </pre>
     *
     * <code>required .payments.Payment payment = 1;</code>
     */
    private void setPayment(org.bitcoin.protocols.payments.Protos.Payment value) {
      value.getClass();
  payment_ = value;
      bitField0_ |= 0x00000001;
      }
    /**
     * <pre>
     * Payment message that triggered this ACK
     * </pre>
     *
     * <code>required .payments.Payment payment = 1;</code>
     */
    @java.lang.SuppressWarnings({"ReferenceEquality"})
    private void mergePayment(org.bitcoin.protocols.payments.Protos.Payment value) {
      value.getClass();
  if (payment_ != null &&
          payment_ != org.bitcoin.protocols.payments.Protos.Payment.getDefaultInstance()) {
        payment_ =
          org.bitcoin.protocols.payments.Protos.Payment.newBuilder(payment_).mergeFrom(value).buildPartial();
      } else {
        payment_ = value;
      }
      bitField0_ |= 0x00000001;
    }
    /**
     * <pre>
     * Payment message that triggered this ACK
     * </pre>
     *
     * <code>required .payments.Payment payment = 1;</code>
     */
    private void clearPayment() {  payment_ = null;
      bitField0_ = (bitField0_ & ~0x00000001);
    }

    public static final int MEMO_FIELD_NUMBER = 2;
    private java.lang.String memo_;
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @return Whether the memo field is set.
     */
    @java.lang.Override
    public boolean hasMemo() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @return The memo.
     */
    @java.lang.Override
    public java.lang.String getMemo() {
      return memo_;
    }
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @return The bytes for memo.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMemoBytes() {
      return com.google.protobuf.ByteString.copyFromUtf8(memo_);
    }
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @param value The memo to set.
     */
    private void setMemo(
        java.lang.String value) {
      java.lang.Class<?> valueClass = value.getClass();
  bitField0_ |= 0x00000002;
      memo_ = value;
    }
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     */
    private void clearMemo() {
      bitField0_ = (bitField0_ & ~0x00000002);
      memo_ = getDefaultInstance().getMemo();
    }
    /**
     * <pre>
     * human-readable message for customer
     * </pre>
     *
     * <code>optional string memo = 2;</code>
     * @param value The bytes for memo to set.
     */
    private void setMemoBytes(
        com.google.protobuf.ByteString value) {
      memo_ = value.toStringUtf8();
      bitField0_ |= 0x00000002;
    }

    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, data, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input);
    }
    public static org.bitcoin.protocols.payments.Protos.PaymentACK parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageLite.parseFrom(
          DEFAULT_INSTANCE, input, extensionRegistry);
    }

    public static Builder newBuilder() {
      return (Builder) DEFAULT_INSTANCE.createBuilder();
    }
    public static Builder newBuilder(org.bitcoin.protocols.payments.Protos.PaymentACK prototype) {
      return (Builder) DEFAULT_INSTANCE.createBuilder(prototype);
    }

    /**
     * Protobuf type {@code payments.PaymentACK}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageLite.Builder<
          org.bitcoin.protocols.payments.Protos.PaymentACK, Builder> implements
        // @@protoc_insertion_point(builder_implements:payments.PaymentACK)
        org.bitcoin.protocols.payments.Protos.PaymentACKOrBuilder {
      // Construct using org.bitcoin.protocols.payments.Protos.PaymentACK.newBuilder()
      private Builder() {
        super(DEFAULT_INSTANCE);
      }


      /**
       * <pre>
       * Payment message that triggered this ACK
       * </pre>
       *
       * <code>required .payments.Payment payment = 1;</code>
       */
      @java.lang.Override
      public boolean hasPayment() {
        return instance.hasPayment();
      }
      /**
       * <pre>
       * Payment message that triggered this ACK
       * </pre>
       *
       * <code>required .payments.Payment payment = 1;</code>
       */
      @java.lang.Override
      public org.bitcoin.protocols.payments.Protos.Payment getPayment() {
        return instance.getPayment();
      }
      /**
       * <pre>
       * Payment message that triggered this ACK
       * </pre>
       *
       * <code>required .payments.Payment payment = 1;</code>
       */
      public Builder setPayment(org.bitcoin.protocols.payments.Protos.Payment value) {
        copyOnWrite();
        instance.setPayment(value);
        return this;
        }
      /**
       * <pre>
       * Payment message that triggered this ACK
       * </pre>
       *
       * <code>required .payments.Payment payment = 1;</code>
       */
      public Builder setPayment(
          org.bitcoin.protocols.payments.Protos.Payment.Builder builderForValue) {
        copyOnWrite();
        instance.setPayment(builderForValue.build());
        return this;
      }
      /**
       * <pre>
       * Payment message that triggered this ACK
       * </pre>
       *
       * <code>required .payments.Payment payment = 1;</code>
       */
      public Builder mergePayment(org.bitcoin.protocols.payments.Protos.Payment value) {
        copyOnWrite();
        instance.mergePayment(value);
        return this;
      }
      /**
       * <pre>
       * Payment message that triggered this ACK
       * </pre>
       *
       * <code>required .payments.Payment payment = 1;</code>
       */
      public Builder clearPayment() {  copyOnWrite();
        instance.clearPayment();
        return this;
      }

      /**
       * <pre>
       * human-readable message for customer
       * </pre>
       *
       * <code>optional string memo = 2;</code>
       * @return Whether the memo field is set.
       */
      @java.lang.Override
      public boolean hasMemo() {
        return instance.hasMemo();
      }
      /**
       * <pre>
       * human-readable message for customer
       * </pre>
       *
       * <code>optional string memo = 2;</code>
       * @return The memo.
       */
      @java.lang.Override
      public java.lang.String getMemo() {
        return instance.getMemo();
      }
      /**
       * <pre>
       * human-readable message for customer
       * </pre>
       *
       * <code>optional string memo = 2;</code>
       * @return The bytes for memo.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getMemoBytes() {
        return instance.getMemoBytes();
      }
      /**
       * <pre>
       * human-readable message for customer
       * </pre>
       *
       * <code>optional string memo = 2;</code>
       * @param value The memo to set.
       * @return This builder for chaining.
       */
      public Builder setMemo(
          java.lang.String value) {
        copyOnWrite();
        instance.setMemo(value);
        return this;
      }
      /**
       * <pre>
       * human-readable message for customer
       * </pre>
       *
       * <code>optional string memo = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMemo() {
        copyOnWrite();
        instance.clearMemo();
        return this;
      }
      /**
       * <pre>
       * human-readable message for customer
       * </pre>
       *
       * <code>optional string memo = 2;</code>
       * @param value The bytes for memo to set.
       * @return This builder for chaining.
       */
      public Builder setMemoBytes(
          com.google.protobuf.ByteString value) {
        copyOnWrite();
        instance.setMemoBytes(value);
        return this;
      }

      // @@protoc_insertion_point(builder_scope:payments.PaymentACK)
    }
    private byte memoizedIsInitialized = 2;
    @java.lang.Override
    @java.lang.SuppressWarnings({"unchecked", "fallthrough"})
    protected final java.lang.Object dynamicMethod(
        com.google.protobuf.GeneratedMessageLite.MethodToInvoke method,
        java.lang.Object arg0, java.lang.Object arg1) {
      switch (method) {
        case NEW_MUTABLE_INSTANCE: {
          return new org.bitcoin.protocols.payments.Protos.PaymentACK();
        }
        case NEW_BUILDER: {
          return new Builder();
        }
        case BUILD_MESSAGE_INFO: {
            java.lang.Object[] objects = new java.lang.Object[] {
              "bitField0_",
              "payment_",
              "memo_",
            };
            java.lang.String info =
                "\u0001\u0002\u0000\u0001\u0001\u0002\u0002\u0000\u0000\u0001\u0001\u1509\u0000\u0002" +
                "\u1008\u0001";
            return newMessageInfo(DEFAULT_INSTANCE, info, objects);
        }
        // fall through
        case GET_DEFAULT_INSTANCE: {
          return DEFAULT_INSTANCE;
        }
        case GET_PARSER: {
          com.google.protobuf.Parser<org.bitcoin.protocols.payments.Protos.PaymentACK> parser = PARSER;
          if (parser == null) {
            synchronized (org.bitcoin.protocols.payments.Protos.PaymentACK.class) {
              parser = PARSER;
              if (parser == null) {
                parser =
                    new DefaultInstanceBasedParser<org.bitcoin.protocols.payments.Protos.PaymentACK>(
                        DEFAULT_INSTANCE);
                PARSER = parser;
              }
            }
          }
          return parser;
      }
      case GET_MEMOIZED_IS_INITIALIZED: {
        return memoizedIsInitialized;
      }
      case SET_MEMOIZED_IS_INITIALIZED: {
        memoizedIsInitialized = (byte) (arg0 == null ? 0 : 1);
        return null;
      }
      }
      throw new UnsupportedOperationException();
    }


    // @@protoc_insertion_point(class_scope:payments.PaymentACK)
    private static final org.bitcoin.protocols.payments.Protos.PaymentACK DEFAULT_INSTANCE;
    static {
      PaymentACK defaultInstance = new PaymentACK();
      // New instances are implicitly immutable so no need to make
      // immutable.
      DEFAULT_INSTANCE = defaultInstance;
      com.google.protobuf.GeneratedMessageLite.registerDefaultInstance(
        PaymentACK.class, defaultInstance);
    }

    public static org.bitcoin.protocols.payments.Protos.PaymentACK getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static volatile com.google.protobuf.Parser<PaymentACK> PARSER;

    public static com.google.protobuf.Parser<PaymentACK> parser() {
      return DEFAULT_INSTANCE.getParserForType();
    }
  }


  static {
  }

  // @@protoc_insertion_point(outer_class_scope)
}
