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

package com.impinj.stp;

public final class StpApi {
  private StpApi() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  /**
   * Protobuf enum {@code Impinj.STP.ErrorCode}
   */
  public enum ErrorCode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    ERROR_CODE_SUCCESS(0, 0),
    /**
     */
    ERROR_CODE_INVALID_COMMAND(1, 1),
    /**
     */
    ERROR_CODE_INVALID_SET_KEY(2, 2),
    /**
     */
    ERROR_CODE_INVALID_GET_KEY(3, 3),
    /**
     */
    ERROR_CODE_INVALID_ADDRESS(4, 4),
    /**
     *
     * Generic for a value in a specific command or a SET command
     */
    ERROR_CODE_INVALID_VALUE(5, 5),
    /**
     */
    ERROR_CODE_FIRMWARE_INVALID(6, 6),
    /**
     *
     * State machine cannot accept the command at this time
     */
    ERROR_CODE_COMMAND_REFUSED(7, 7),
    /**
     */
    ERROR_CODE_SET_KEY_READ_ONLY(8, 8),
    /**
     */
    ERROR_CODE_NO_HANDSHAKE(9, 9),
    /**
     */
    ERROR_CODE_NO_DEVICE_CONNECTION(10, 10),
    /**
     */
    ERROR_CODE_UNSUPPORTED(11, 11),
    /**
     *
     * Failure when initializing the device network connection.
     */
    ERROR_CODE_NETWORK_INIT(12, 12),
    ;

    /**
     */
    public static final int ERROR_CODE_SUCCESS_VALUE = 0;
    /**
     */
    public static final int ERROR_CODE_INVALID_COMMAND_VALUE = 1;
    /**
     */
    public static final int ERROR_CODE_INVALID_SET_KEY_VALUE = 2;
    /**
     */
    public static final int ERROR_CODE_INVALID_GET_KEY_VALUE = 3;
    /**
     */
    public static final int ERROR_CODE_INVALID_ADDRESS_VALUE = 4;
    /**
     *
     * Generic for a value in a specific command or a SET command
     */
    public static final int ERROR_CODE_INVALID_VALUE_VALUE = 5;
    /**
     */
    public static final int ERROR_CODE_FIRMWARE_INVALID_VALUE = 6;
    /**
     *
     * State machine cannot accept the command at this time
     */
    public static final int ERROR_CODE_COMMAND_REFUSED_VALUE = 7;
    /**
     */
    public static final int ERROR_CODE_SET_KEY_READ_ONLY_VALUE = 8;
    /**
     */
    public static final int ERROR_CODE_NO_HANDSHAKE_VALUE = 9;
    /**
     */
    public static final int ERROR_CODE_NO_DEVICE_CONNECTION_VALUE = 10;
    /**
     */
    public static final int ERROR_CODE_UNSUPPORTED_VALUE = 11;
    /**
     *
     * Failure when initializing the device network connection.
     */
    public static final int ERROR_CODE_NETWORK_INIT_VALUE = 12;


    public final int getNumber() { return value; }

    public static ErrorCode valueOf(int value) {
      switch (value) {
        case 0: return ERROR_CODE_SUCCESS;
        case 1: return ERROR_CODE_INVALID_COMMAND;
        case 2: return ERROR_CODE_INVALID_SET_KEY;
        case 3: return ERROR_CODE_INVALID_GET_KEY;
        case 4: return ERROR_CODE_INVALID_ADDRESS;
        case 5: return ERROR_CODE_INVALID_VALUE;
        case 6: return ERROR_CODE_FIRMWARE_INVALID;
        case 7: return ERROR_CODE_COMMAND_REFUSED;
        case 8: return ERROR_CODE_SET_KEY_READ_ONLY;
        case 9: return ERROR_CODE_NO_HANDSHAKE;
        case 10: return ERROR_CODE_NO_DEVICE_CONNECTION;
        case 11: return ERROR_CODE_UNSUPPORTED;
        case 12: return ERROR_CODE_NETWORK_INIT;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<ErrorCode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<ErrorCode>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<ErrorCode>() {
            public ErrorCode findValueByNumber(int number) {
              return ErrorCode.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(0);
    }

    private static final ErrorCode[] VALUES = values();

    public static ErrorCode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private ErrorCode(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.ErrorCode)
  }

  /**
   * Protobuf enum {@code Impinj.STP.Gen2Session}
   */
  public enum Gen2Session
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    GEN2_SESSION_0(0, 0),
    /**
     */
    GEN2_SESSION_1(1, 1),
    /**
     */
    GEN2_SESSION_2(2, 2),
    /**
     */
    GEN2_SESSION_3(3, 3),
    ;

    /**
     */
    public static final int GEN2_SESSION_0_VALUE = 0;
    /**
     */
    public static final int GEN2_SESSION_1_VALUE = 1;
    /**
     */
    public static final int GEN2_SESSION_2_VALUE = 2;
    /**
     */
    public static final int GEN2_SESSION_3_VALUE = 3;


    public final int getNumber() { return value; }

    public static Gen2Session valueOf(int value) {
      switch (value) {
        case 0: return GEN2_SESSION_0;
        case 1: return GEN2_SESSION_1;
        case 2: return GEN2_SESSION_2;
        case 3: return GEN2_SESSION_3;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Gen2Session>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<Gen2Session>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Gen2Session>() {
            public Gen2Session findValueByNumber(int number) {
              return Gen2Session.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(1);
    }

    private static final Gen2Session[] VALUES = values();

    public static Gen2Session valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private Gen2Session(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.Gen2Session)
  }

  /**
   * Protobuf enum {@code Impinj.STP.DeviceOperatingState}
   */
  public enum DeviceOperatingState
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    DEVICE_OPERATING_STATE_READY(0, 0),
    /**
     */
    DEVICE_OPERATING_STATE_OPERATING(1, 1),
    /**
     */
    DEVICE_OPERATING_STATE_ENGAGED(2, 2),
    /**
     */
    DEVICE_OPERATING_STATE_FAULT(3, 3),
    ;

    /**
     */
    public static final int DEVICE_OPERATING_STATE_READY_VALUE = 0;
    /**
     */
    public static final int DEVICE_OPERATING_STATE_OPERATING_VALUE = 1;
    /**
     */
    public static final int DEVICE_OPERATING_STATE_ENGAGED_VALUE = 2;
    /**
     */
    public static final int DEVICE_OPERATING_STATE_FAULT_VALUE = 3;


    public final int getNumber() { return value; }

    public static DeviceOperatingState valueOf(int value) {
      switch (value) {
        case 0: return DEVICE_OPERATING_STATE_READY;
        case 1: return DEVICE_OPERATING_STATE_OPERATING;
        case 2: return DEVICE_OPERATING_STATE_ENGAGED;
        case 3: return DEVICE_OPERATING_STATE_FAULT;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<DeviceOperatingState>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<DeviceOperatingState>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<DeviceOperatingState>() {
            public DeviceOperatingState findValueByNumber(int number) {
              return DeviceOperatingState.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(2);
    }

    private static final DeviceOperatingState[] VALUES = values();

    public static DeviceOperatingState valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private DeviceOperatingState(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.DeviceOperatingState)
  }

  /**
   * Protobuf enum {@code Impinj.STP.DeviceFaultType}
   */
  public enum DeviceFaultType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    DEVICE_FAULT_TYPE_NONE(0, 0),
    /**
     */
    DEVICE_FAULT_TYPE_NETWORK_DISCONNECT(1, 1),
    /**
     */
    DEVICE_FAULT_TYPE_APPLICATION_FAILURE(2, 2),
    /**
     */
    DEVICE_FAULT_TYPE_FPGA_FAILURE(3, 3),
    ;

    /**
     */
    public static final int DEVICE_FAULT_TYPE_NONE_VALUE = 0;
    /**
     */
    public static final int DEVICE_FAULT_TYPE_NETWORK_DISCONNECT_VALUE = 1;
    /**
     */
    public static final int DEVICE_FAULT_TYPE_APPLICATION_FAILURE_VALUE = 2;
    /**
     */
    public static final int DEVICE_FAULT_TYPE_FPGA_FAILURE_VALUE = 3;


    public final int getNumber() { return value; }

    public static DeviceFaultType valueOf(int value) {
      switch (value) {
        case 0: return DEVICE_FAULT_TYPE_NONE;
        case 1: return DEVICE_FAULT_TYPE_NETWORK_DISCONNECT;
        case 2: return DEVICE_FAULT_TYPE_APPLICATION_FAILURE;
        case 3: return DEVICE_FAULT_TYPE_FPGA_FAILURE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<DeviceFaultType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<DeviceFaultType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<DeviceFaultType>() {
            public DeviceFaultType findValueByNumber(int number) {
              return DeviceFaultType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(3);
    }

    private static final DeviceFaultType[] VALUES = values();

    public static DeviceFaultType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private DeviceFaultType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.DeviceFaultType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.VersionType}
   *
   * The local library or remote device component corresponding
   * to the version.
   */
  public enum VersionType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     *
     * Version of the tool used to create the API on the host.
     */
    VERSION_TYPE_KODIAK_HOST(0, 0),
    /**
     *
     * Version of the tool used to create the API on the reader.
     */
    VERSION_TYPE_KODIAK_READER(1, 1),
    /**
     *
     * Version of the protocol used by the reader.
     */
    VERSION_TYPE_FRAME_READER(2, 2),
    /**
     *
     * Version of the API on the host.
     */
    VERSION_TYPE_API_HOST(3, 3),
    /**
     *
     * Version of the API on the reader.
     */
    VERSION_TYPE_API_READER(4, 4),
    /**
     *
     * Version of the reader firmware.
     */
    VERSION_TYPE_FIRMWARE(5, 5),
    /**
     *
     * Version of custom application.
     */
    VERSION_TYPE_FIRMWARE_CUST(6, 6),
    /**
     *
     * Version of the tool which upgrades reader software.
     */
    VERSION_TYPE_UPGRADE_AGENT(7, 7),
    /**
     *
     * FPGA bitfile version in reader hardware.
     */
    VERSION_TYPE_FPGA_IMAGE(8, 8),
    ;

    /**
     *
     * Version of the tool used to create the API on the host.
     */
    public static final int VERSION_TYPE_KODIAK_HOST_VALUE = 0;
    /**
     *
     * Version of the tool used to create the API on the reader.
     */
    public static final int VERSION_TYPE_KODIAK_READER_VALUE = 1;
    /**
     *
     * Version of the protocol used by the reader.
     */
    public static final int VERSION_TYPE_FRAME_READER_VALUE = 2;
    /**
     *
     * Version of the API on the host.
     */
    public static final int VERSION_TYPE_API_HOST_VALUE = 3;
    /**
     *
     * Version of the API on the reader.
     */
    public static final int VERSION_TYPE_API_READER_VALUE = 4;
    /**
     *
     * Version of the reader firmware.
     */
    public static final int VERSION_TYPE_FIRMWARE_VALUE = 5;
    /**
     *
     * Version of custom application.
     */
    public static final int VERSION_TYPE_FIRMWARE_CUST_VALUE = 6;
    /**
     *
     * Version of the tool which upgrades reader software.
     */
    public static final int VERSION_TYPE_UPGRADE_AGENT_VALUE = 7;
    /**
     *
     * FPGA bitfile version in reader hardware.
     */
    public static final int VERSION_TYPE_FPGA_IMAGE_VALUE = 8;


    public final int getNumber() { return value; }

    public static VersionType valueOf(int value) {
      switch (value) {
        case 0: return VERSION_TYPE_KODIAK_HOST;
        case 1: return VERSION_TYPE_KODIAK_READER;
        case 2: return VERSION_TYPE_FRAME_READER;
        case 3: return VERSION_TYPE_API_HOST;
        case 4: return VERSION_TYPE_API_READER;
        case 5: return VERSION_TYPE_FIRMWARE;
        case 6: return VERSION_TYPE_FIRMWARE_CUST;
        case 7: return VERSION_TYPE_UPGRADE_AGENT;
        case 8: return VERSION_TYPE_FPGA_IMAGE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<VersionType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<VersionType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<VersionType>() {
            public VersionType findValueByNumber(int number) {
              return VersionType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(4);
    }

    private static final VersionType[] VALUES = values();

    public static VersionType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private VersionType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.VersionType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.RegulatoryRegion}
   *
   * RF regulatory region.
   */
  public enum RegulatoryRegion
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    REGULATORY_REGION_FCC_PART_15_247(0, 0),
    /**
     */
    REGULATORY_REGION_ETSI_EN_300_220(1, 1),
    /**
     */
    REGULATORY_REGION_ETSI_EN_302_208_LBT(2, 2),
    /**
     */
    REGULATORY_REGION_HONG_KONG_920_925_MHZ(3, 3),
    /**
     */
    REGULATORY_REGION_TAIWAN_922_928_MHZ(4, 4),
    /**
     */
    REGULATORY_REGION_JAPAN_952_954_MHZ(5, 5),
    /**
     */
    REGULATORY_REGION_JAPAN_952_954_MHZ_LOWPOWER(6, 6),
    /**
     */
    REGULATORY_REGION_ETSI_EN_302_208_V1_2_1(7, 7),
    /**
     */
    REGULATORY_REGION_KOREA_917_921_MHZ(8, 8),
    /**
     */
    REGULATORY_REGION_MALAYSIA_919_921_MHZ(9, 9),
    /**
     */
    REGULATORY_REGION_CHINA_920_925_MHZ(10, 10),
    /**
     */
    REGULATORY_REGION_JAPAN_952_956_MHZ_NO_LBT(11, 11),
    /**
     */
    REGULATORY_REGION_SOUTH_AFRICA_915_919_MHZ(12, 12),
    /**
     */
    REGULATORY_REGION_BRAZIL_902_907_AND_915_928_MHZ(13, 13),
    /**
     */
    REGULATORY_REGION_THAILAND_920_925_MHZ(14, 14),
    /**
     */
    REGULATORY_REGION_SINGAPORE_920_925_MHZ(15, 15),
    /**
     */
    REGULATORY_REGION_AUSTRALIA_920_926_MHZ(16, 16),
    /**
     */
    REGULATORY_REGION_INDIA_865_867_MHZ(17, 17),
    /**
     */
    REGULATORY_REGION_URUGUAY_916_928_MHZ(18, 18),
    /**
     */
    REGULATORY_REGION_VIETNAM_920_925_MHZ(19, 19),
    /**
     */
    REGULATORY_REGION_ISRAEL_915_917_MHZ(20, 20),
    /**
     */
    REGULATORY_REGION_PHILIPPINES_918_920_MHZ(21, 21),
    /**
     */
    REGULATORY_REGION_INDONESIA_923_925_MHZ(22, 22),
    /**
     */
    REGULATORY_REGION_NEW_ZEALAND_921P5_928_MHZ(23, 23),
    /**
     */
    REGULATORY_REGION_JAPAN_916_921_MHZ_NO_LBT(24, 24),
    /**
     */
    REGULATORY_REGION_LATIN_AMERICA_902_928_MHZ(25, 25),
    ;

    /**
     */
    public static final int REGULATORY_REGION_FCC_PART_15_247_VALUE = 0;
    /**
     */
    public static final int REGULATORY_REGION_ETSI_EN_300_220_VALUE = 1;
    /**
     */
    public static final int REGULATORY_REGION_ETSI_EN_302_208_LBT_VALUE = 2;
    /**
     */
    public static final int REGULATORY_REGION_HONG_KONG_920_925_MHZ_VALUE = 3;
    /**
     */
    public static final int REGULATORY_REGION_TAIWAN_922_928_MHZ_VALUE = 4;
    /**
     */
    public static final int REGULATORY_REGION_JAPAN_952_954_MHZ_VALUE = 5;
    /**
     */
    public static final int REGULATORY_REGION_JAPAN_952_954_MHZ_LOWPOWER_VALUE = 6;
    /**
     */
    public static final int REGULATORY_REGION_ETSI_EN_302_208_V1_2_1_VALUE = 7;
    /**
     */
    public static final int REGULATORY_REGION_KOREA_917_921_MHZ_VALUE = 8;
    /**
     */
    public static final int REGULATORY_REGION_MALAYSIA_919_921_MHZ_VALUE = 9;
    /**
     */
    public static final int REGULATORY_REGION_CHINA_920_925_MHZ_VALUE = 10;
    /**
     */
    public static final int REGULATORY_REGION_JAPAN_952_956_MHZ_NO_LBT_VALUE = 11;
    /**
     */
    public static final int REGULATORY_REGION_SOUTH_AFRICA_915_919_MHZ_VALUE = 12;
    /**
     */
    public static final int REGULATORY_REGION_BRAZIL_902_907_AND_915_928_MHZ_VALUE = 13;
    /**
     */
    public static final int REGULATORY_REGION_THAILAND_920_925_MHZ_VALUE = 14;
    /**
     */
    public static final int REGULATORY_REGION_SINGAPORE_920_925_MHZ_VALUE = 15;
    /**
     */
    public static final int REGULATORY_REGION_AUSTRALIA_920_926_MHZ_VALUE = 16;
    /**
     */
    public static final int REGULATORY_REGION_INDIA_865_867_MHZ_VALUE = 17;
    /**
     */
    public static final int REGULATORY_REGION_URUGUAY_916_928_MHZ_VALUE = 18;
    /**
     */
    public static final int REGULATORY_REGION_VIETNAM_920_925_MHZ_VALUE = 19;
    /**
     */
    public static final int REGULATORY_REGION_ISRAEL_915_917_MHZ_VALUE = 20;
    /**
     */
    public static final int REGULATORY_REGION_PHILIPPINES_918_920_MHZ_VALUE = 21;
    /**
     */
    public static final int REGULATORY_REGION_INDONESIA_923_925_MHZ_VALUE = 22;
    /**
     */
    public static final int REGULATORY_REGION_NEW_ZEALAND_921P5_928_MHZ_VALUE = 23;
    /**
     */
    public static final int REGULATORY_REGION_JAPAN_916_921_MHZ_NO_LBT_VALUE = 24;
    /**
     */
    public static final int REGULATORY_REGION_LATIN_AMERICA_902_928_MHZ_VALUE = 25;


    public final int getNumber() { return value; }

    public static RegulatoryRegion valueOf(int value) {
      switch (value) {
        case 0: return REGULATORY_REGION_FCC_PART_15_247;
        case 1: return REGULATORY_REGION_ETSI_EN_300_220;
        case 2: return REGULATORY_REGION_ETSI_EN_302_208_LBT;
        case 3: return REGULATORY_REGION_HONG_KONG_920_925_MHZ;
        case 4: return REGULATORY_REGION_TAIWAN_922_928_MHZ;
        case 5: return REGULATORY_REGION_JAPAN_952_954_MHZ;
        case 6: return REGULATORY_REGION_JAPAN_952_954_MHZ_LOWPOWER;
        case 7: return REGULATORY_REGION_ETSI_EN_302_208_V1_2_1;
        case 8: return REGULATORY_REGION_KOREA_917_921_MHZ;
        case 9: return REGULATORY_REGION_MALAYSIA_919_921_MHZ;
        case 10: return REGULATORY_REGION_CHINA_920_925_MHZ;
        case 11: return REGULATORY_REGION_JAPAN_952_956_MHZ_NO_LBT;
        case 12: return REGULATORY_REGION_SOUTH_AFRICA_915_919_MHZ;
        case 13: return REGULATORY_REGION_BRAZIL_902_907_AND_915_928_MHZ;
        case 14: return REGULATORY_REGION_THAILAND_920_925_MHZ;
        case 15: return REGULATORY_REGION_SINGAPORE_920_925_MHZ;
        case 16: return REGULATORY_REGION_AUSTRALIA_920_926_MHZ;
        case 17: return REGULATORY_REGION_INDIA_865_867_MHZ;
        case 18: return REGULATORY_REGION_URUGUAY_916_928_MHZ;
        case 19: return REGULATORY_REGION_VIETNAM_920_925_MHZ;
        case 20: return REGULATORY_REGION_ISRAEL_915_917_MHZ;
        case 21: return REGULATORY_REGION_PHILIPPINES_918_920_MHZ;
        case 22: return REGULATORY_REGION_INDONESIA_923_925_MHZ;
        case 23: return REGULATORY_REGION_NEW_ZEALAND_921P5_928_MHZ;
        case 24: return REGULATORY_REGION_JAPAN_916_921_MHZ_NO_LBT;
        case 25: return REGULATORY_REGION_LATIN_AMERICA_902_928_MHZ;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<RegulatoryRegion>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<RegulatoryRegion>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<RegulatoryRegion>() {
            public RegulatoryRegion findValueByNumber(int number) {
              return RegulatoryRegion.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(5);
    }

    private static final RegulatoryRegion[] VALUES = values();

    public static RegulatoryRegion valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private RegulatoryRegion(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.RegulatoryRegion)
  }

  /**
   * Protobuf enum {@code Impinj.STP.GPIOState}
   */
  public enum GPIOState
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    GPIO_STATE_LOW(0, 0),
    /**
     */
    GPIO_STATE_HIGH(1, 1),
    ;

    /**
     */
    public static final int GPIO_STATE_LOW_VALUE = 0;
    /**
     */
    public static final int GPIO_STATE_HIGH_VALUE = 1;


    public final int getNumber() { return value; }

    public static GPIOState valueOf(int value) {
      switch (value) {
        case 0: return GPIO_STATE_LOW;
        case 1: return GPIO_STATE_HIGH;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<GPIOState>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<GPIOState>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<GPIOState>() {
            public GPIOState findValueByNumber(int number) {
              return GPIOState.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(6);
    }

    private static final GPIOState[] VALUES = values();

    public static GPIOState valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private GPIOState(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.GPIOState)
  }

  /**
   * Protobuf enum {@code Impinj.STP.GPIOPolarity}
   */
  public enum GPIOPolarity
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    GPIO_POLARITY_ACTIVE_LOW(0, 0),
    /**
     */
    GPIO_POLARITY_ACTIVE_HIGH(1, 1),
    ;

    /**
     */
    public static final int GPIO_POLARITY_ACTIVE_LOW_VALUE = 0;
    /**
     */
    public static final int GPIO_POLARITY_ACTIVE_HIGH_VALUE = 1;


    public final int getNumber() { return value; }

    public static GPIOPolarity valueOf(int value) {
      switch (value) {
        case 0: return GPIO_POLARITY_ACTIVE_LOW;
        case 1: return GPIO_POLARITY_ACTIVE_HIGH;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<GPIOPolarity>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<GPIOPolarity>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<GPIOPolarity>() {
            public GPIOPolarity findValueByNumber(int number) {
              return GPIOPolarity.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(7);
    }

    private static final GPIOPolarity[] VALUES = values();

    public static GPIOPolarity valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private GPIOPolarity(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.GPIOPolarity)
  }

  /**
   * Protobuf enum {@code Impinj.STP.Gen2Mode}
   */
  public enum Gen2Mode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    GEN2_MODE_MAX_THROUGHPUT(0, 0),
    /**
     */
    GEN2_MODE_HYBRID(1, 1),
    /**
     */
    GEN2_MODE_DENSE_READER_M4(2, 2),
    /**
     */
    GEN2_MODE_DENSE_READER_M8(3, 3),
    /**
     */
    GEN2_MODE_MAX_MILLER(4, 4),
    /**
     */
    GEN2_MODE_DENSE_READER_M4_2(5, 5),
    /**
     */
    GEN2_MODE_MAX_THROUGHPUT_M4(6, 6),
    /**
     *
     * DEPRECATED
     */
    GEN2_MODE_AUTO_SET(7, 1000),
    ;

    /**
     */
    public static final int GEN2_MODE_MAX_THROUGHPUT_VALUE = 0;
    /**
     */
    public static final int GEN2_MODE_HYBRID_VALUE = 1;
    /**
     */
    public static final int GEN2_MODE_DENSE_READER_M4_VALUE = 2;
    /**
     */
    public static final int GEN2_MODE_DENSE_READER_M8_VALUE = 3;
    /**
     */
    public static final int GEN2_MODE_MAX_MILLER_VALUE = 4;
    /**
     */
    public static final int GEN2_MODE_DENSE_READER_M4_2_VALUE = 5;
    /**
     */
    public static final int GEN2_MODE_MAX_THROUGHPUT_M4_VALUE = 6;
    /**
     *
     * DEPRECATED
     */
    public static final int GEN2_MODE_AUTO_SET_VALUE = 1000;


    public final int getNumber() { return value; }

    public static Gen2Mode valueOf(int value) {
      switch (value) {
        case 0: return GEN2_MODE_MAX_THROUGHPUT;
        case 1: return GEN2_MODE_HYBRID;
        case 2: return GEN2_MODE_DENSE_READER_M4;
        case 3: return GEN2_MODE_DENSE_READER_M8;
        case 4: return GEN2_MODE_MAX_MILLER;
        case 5: return GEN2_MODE_DENSE_READER_M4_2;
        case 6: return GEN2_MODE_MAX_THROUGHPUT_M4;
        case 1000: return GEN2_MODE_AUTO_SET;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Gen2Mode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<Gen2Mode>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Gen2Mode>() {
            public Gen2Mode findValueByNumber(int number) {
              return Gen2Mode.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(8);
    }

    private static final Gen2Mode[] VALUES = values();

    public static Gen2Mode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private Gen2Mode(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.Gen2Mode)
  }

  /**
   * Protobuf enum {@code Impinj.STP.InventorySearchMode}
   *
   * How to inventory tags.
   */
  public enum InventorySearchMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     *
     * Inventory tags from A to B state and back to A.
     */
    INVENTORY_SEARCH_MODE_DUAL_TARGET(0, 1),
    /**
     *
     * Inventory tags from A to B state.
     */
    INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B(1, 2),
    /**
     *
     * Inventory tags from B to A state.
     */
    INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A(2, 3),
    /**
     *
     * Inventory tags from A to B state with boost.
     */
    INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS(3, 4),
    /**
     *
     * Inventory tags from B to A state with boost.
     */
    INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A_MONZA_TAGFOCUS(4, 5),
    /**
     *
     * ItemVerify Inventory Search Mode 1
     */
    INVENTORY_SEARCH_MODE_CARTON_STAGE_1(5, 7),
    /**
     *
     * ItemVerify Inventory Search Mode 2
     */
    INVENTORY_SEARCH_MODE_CARTON_STAGE_2(6, 8),
    ;

    /**
     *
     * Inventory tags from A to B state and back to A.
     */
    public static final int INVENTORY_SEARCH_MODE_DUAL_TARGET_VALUE = 1;
    /**
     *
     * Inventory tags from A to B state.
     */
    public static final int INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_VALUE = 2;
    /**
     *
     * Inventory tags from B to A state.
     */
    public static final int INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A_VALUE = 3;
    /**
     *
     * Inventory tags from A to B state with boost.
     */
    public static final int INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS_VALUE = 4;
    /**
     *
     * Inventory tags from B to A state with boost.
     */
    public static final int INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A_MONZA_TAGFOCUS_VALUE = 5;
    /**
     *
     * ItemVerify Inventory Search Mode 1
     */
    public static final int INVENTORY_SEARCH_MODE_CARTON_STAGE_1_VALUE = 7;
    /**
     *
     * ItemVerify Inventory Search Mode 2
     */
    public static final int INVENTORY_SEARCH_MODE_CARTON_STAGE_2_VALUE = 8;


    public final int getNumber() { return value; }

    public static InventorySearchMode valueOf(int value) {
      switch (value) {
        case 1: return INVENTORY_SEARCH_MODE_DUAL_TARGET;
        case 2: return INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B;
        case 3: return INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A;
        case 4: return INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS;
        case 5: return INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO_A_MONZA_TAGFOCUS;
        case 7: return INVENTORY_SEARCH_MODE_CARTON_STAGE_1;
        case 8: return INVENTORY_SEARCH_MODE_CARTON_STAGE_2;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<InventorySearchMode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<InventorySearchMode>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<InventorySearchMode>() {
            public InventorySearchMode findValueByNumber(int number) {
              return InventorySearchMode.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(9);
    }

    private static final InventorySearchMode[] VALUES = values();

    public static InventorySearchMode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private InventorySearchMode(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.InventorySearchMode)
  }

  /**
   * Protobuf enum {@code Impinj.STP.DeviceMode}
   */
  public enum DeviceMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    DEVICE_MODE_INVENTORY(0, 0),
    /**
     */
    DEVICE_MODE_ENCODE(1, 1),
    /**
     */
    DEVICE_MODE_VERIFY_TAGCHIP_BASIC(2, 2),
    /**
     */
    DEVICE_MODE_VERIFY_TAGCHIP_DATA(3, 3),
    /**
     *
     * DEVICE_MODE_VERIFY_ADVANCED_MONZA       = 4;
     * DEVICE_MODE_VERIFY_ADVANCED_RF_PERFORMANCE    = 5;
     */
    DEVICE_MODE_ITEM_VERIFY(4, 6),
    ;

    /**
     */
    public static final int DEVICE_MODE_INVENTORY_VALUE = 0;
    /**
     */
    public static final int DEVICE_MODE_ENCODE_VALUE = 1;
    /**
     */
    public static final int DEVICE_MODE_VERIFY_TAGCHIP_BASIC_VALUE = 2;
    /**
     */
    public static final int DEVICE_MODE_VERIFY_TAGCHIP_DATA_VALUE = 3;
    /**
     *
     * DEVICE_MODE_VERIFY_ADVANCED_MONZA       = 4;
     * DEVICE_MODE_VERIFY_ADVANCED_RF_PERFORMANCE    = 5;
     */
    public static final int DEVICE_MODE_ITEM_VERIFY_VALUE = 6;


    public final int getNumber() { return value; }

    public static DeviceMode valueOf(int value) {
      switch (value) {
        case 0: return DEVICE_MODE_INVENTORY;
        case 1: return DEVICE_MODE_ENCODE;
        case 2: return DEVICE_MODE_VERIFY_TAGCHIP_BASIC;
        case 3: return DEVICE_MODE_VERIFY_TAGCHIP_DATA;
        case 6: return DEVICE_MODE_ITEM_VERIFY;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<DeviceMode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<DeviceMode>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<DeviceMode>() {
            public DeviceMode findValueByNumber(int number) {
              return DeviceMode.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(10);
    }

    private static final DeviceMode[] VALUES = values();

    public static DeviceMode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private DeviceMode(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.DeviceMode)
  }

  /**
   * Protobuf enum {@code Impinj.STP.OperationMode}
   *
   * How the reader will be used.
   */
  public enum OperationMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     *
     * Use with a start and stop for a quantity of tags.
     */
    OPERATION_MODE_BATCH(0, 0),
    /**
     *
     * Use with a start and stop for optimized encoding or
     * verification when a single tag is in the FoV.
     */
    OPERATION_MODE_SINGLE(1, 1),
    /**
     *
     * Use this mode to encode a continuous stream of tags.
     */
    OPERATION_MODE_CONTINUOUS(2, 2),
    ;

    /**
     *
     * Use with a start and stop for a quantity of tags.
     */
    public static final int OPERATION_MODE_BATCH_VALUE = 0;
    /**
     *
     * Use with a start and stop for optimized encoding or
     * verification when a single tag is in the FoV.
     */
    public static final int OPERATION_MODE_SINGLE_VALUE = 1;
    /**
     *
     * Use this mode to encode a continuous stream of tags.
     */
    public static final int OPERATION_MODE_CONTINUOUS_VALUE = 2;


    public final int getNumber() { return value; }

    public static OperationMode valueOf(int value) {
      switch (value) {
        case 0: return OPERATION_MODE_BATCH;
        case 1: return OPERATION_MODE_SINGLE;
        case 2: return OPERATION_MODE_CONTINUOUS;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<OperationMode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<OperationMode>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<OperationMode>() {
            public OperationMode findValueByNumber(int number) {
              return OperationMode.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(11);
    }

    private static final OperationMode[] VALUES = values();

    public static OperationMode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private OperationMode(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.OperationMode)
  }

  /**
   * Protobuf enum {@code Impinj.STP.GPIOSignalMode}
   *
   * The way that GPIOs are used, with functions on the same
   * GPIOs or on separate GPIOs.
   */
  public enum GPIOSignalMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    GPIO_SIGNAL_MODE_COMBINED(0, 0),
    /**
     */
    GPIO_SIGNAL_MODE_SEPARATE(1, 1),
    /**
     */
    GPIO_SIGNAL_MODE_PRESENCE_DETECTION(2, 2),
    ;

    /**
     */
    public static final int GPIO_SIGNAL_MODE_COMBINED_VALUE = 0;
    /**
     */
    public static final int GPIO_SIGNAL_MODE_SEPARATE_VALUE = 1;
    /**
     */
    public static final int GPIO_SIGNAL_MODE_PRESENCE_DETECTION_VALUE = 2;


    public final int getNumber() { return value; }

    public static GPIOSignalMode valueOf(int value) {
      switch (value) {
        case 0: return GPIO_SIGNAL_MODE_COMBINED;
        case 1: return GPIO_SIGNAL_MODE_SEPARATE;
        case 2: return GPIO_SIGNAL_MODE_PRESENCE_DETECTION;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<GPIOSignalMode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<GPIOSignalMode>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<GPIOSignalMode>() {
            public GPIOSignalMode findValueByNumber(int number) {
              return GPIOSignalMode.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(12);
    }

    private static final GPIOSignalMode[] VALUES = values();

    public static GPIOSignalMode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private GPIOSignalMode(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.GPIOSignalMode)
  }

  /**
   * Protobuf enum {@code Impinj.STP.ReportType}
   *
   * Use this type when registering a report handler.
   */
  public enum ReportType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    REPORT_TYPE_ALL(0, 0),
    /**
     */
    REPORT_TYPE_DEVICE_EVENT(1, 1),
    /**
     */
    REPORT_TYPE_OPERATION_SUMMARY(2, 2),
    /**
     */
    REPORT_TYPE_TAG_OPERATION(3, 3),
    /**
     */
    REPORT_TYPE_CARTON_CONTENTS(4, 4),
    ;

    /**
     */
    public static final int REPORT_TYPE_ALL_VALUE = 0;
    /**
     */
    public static final int REPORT_TYPE_DEVICE_EVENT_VALUE = 1;
    /**
     */
    public static final int REPORT_TYPE_OPERATION_SUMMARY_VALUE = 2;
    /**
     */
    public static final int REPORT_TYPE_TAG_OPERATION_VALUE = 3;
    /**
     */
    public static final int REPORT_TYPE_CARTON_CONTENTS_VALUE = 4;


    public final int getNumber() { return value; }

    public static ReportType valueOf(int value) {
      switch (value) {
        case 0: return REPORT_TYPE_ALL;
        case 1: return REPORT_TYPE_DEVICE_EVENT;
        case 2: return REPORT_TYPE_OPERATION_SUMMARY;
        case 3: return REPORT_TYPE_TAG_OPERATION;
        case 4: return REPORT_TYPE_CARTON_CONTENTS;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<ReportType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<ReportType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<ReportType>() {
            public ReportType findValueByNumber(int number) {
              return ReportType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(13);
    }

    private static final ReportType[] VALUES = values();

    public static ReportType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private ReportType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.ReportType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.TagOperationReportTrigger}
   */
  public enum TagOperationReportTrigger
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     *
     * Send reports as operations are performed.
     * 
     *  Send reports when the batch operation is complete.
     */
    TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE(0, 1),
    ;

    /**
     *
     * Send reports as operations are performed.
     * 
     *  Send reports when the batch operation is complete.
     */
    public static final int TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE_VALUE = 1;


    public final int getNumber() { return value; }

    public static TagOperationReportTrigger valueOf(int value) {
      switch (value) {
        case 1: return TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<TagOperationReportTrigger>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<TagOperationReportTrigger>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<TagOperationReportTrigger>() {
            public TagOperationReportTrigger findValueByNumber(int number) {
              return TagOperationReportTrigger.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(14);
    }

    private static final TagOperationReportTrigger[] VALUES = values();

    public static TagOperationReportTrigger valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private TagOperationReportTrigger(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.TagOperationReportTrigger)
  }

  /**
   * Protobuf enum {@code Impinj.STP.OperationSummaryResult}
   */
  public enum OperationSummaryResult
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    OPERATION_SUMMARY_RESULT_PASS(0, 0),
    /**
     *
     * OPERATION_SUMMARY_RESULT_FAIL_COUNT_OVER    = 2;
     * OPERATION_SUMMARY_RESULT_FAIL_COUNT_UNDER   = 3;
     */
    OPERATION_SUMMARY_RESULT_FAIL(1, 1),
    ;

    /**
     */
    public static final int OPERATION_SUMMARY_RESULT_PASS_VALUE = 0;
    /**
     *
     * OPERATION_SUMMARY_RESULT_FAIL_COUNT_OVER    = 2;
     * OPERATION_SUMMARY_RESULT_FAIL_COUNT_UNDER   = 3;
     */
    public static final int OPERATION_SUMMARY_RESULT_FAIL_VALUE = 1;


    public final int getNumber() { return value; }

    public static OperationSummaryResult valueOf(int value) {
      switch (value) {
        case 0: return OPERATION_SUMMARY_RESULT_PASS;
        case 1: return OPERATION_SUMMARY_RESULT_FAIL;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<OperationSummaryResult>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<OperationSummaryResult>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<OperationSummaryResult>() {
            public OperationSummaryResult findValueByNumber(int number) {
              return OperationSummaryResult.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(15);
    }

    private static final OperationSummaryResult[] VALUES = values();

    public static OperationSummaryResult valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private OperationSummaryResult(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.OperationSummaryResult)
  }

  /**
   * Protobuf enum {@code Impinj.STP.TagOperationResult}
   */
  public enum TagOperationResult
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    TAG_OPERATION_RESULT_PASS(0, 0),
    /**
     */
    TAG_OPERATION_RESULT_PASS_ALREADY_DONE(1, 1),
    /**
     */
    TAG_OPERATION_RESULT_RETRY(2, 2),
    /**
     */
    TAG_OPERATION_RESULT_RETRY_INSUFFICIENT_POWER(3, 3),
    /**
     */
    TAG_OPERATION_RESULT_RETRY_NO_RESPONSE_FROM_TAG(4, 4),
    /**
     */
    TAG_OPERATION_RESULT_RETRY_SERIALIZATION_JOB_QUEUE_EMPTY(5, 5),
    /**
     */
    TAG_OPERATION_RESULT_RETRY_TID_TABLE_NO_MATCH(6, 6),
    /**
     */
    TAG_OPERATION_RESULT_RETRY_ORDERED_LIST_EMPTY(7, 7),
    /**
     */
    TAG_OPERATION_RESULT_FAIL(8, 8),
    /**
     */
    TAG_OPERATION_RESULT_FAIL_INSUFFICIENT_POWER(9, 9),
    /**
     */
    TAG_OPERATION_RESULT_FAIL_NO_RESPONSE_FROM_TAG(10, 10),
    /**
     */
    TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_LOCKED(11, 11),
    /**
     */
    TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_MEMORY_OVERRUN(12, 12),
    /**
     */
    TAG_OPERATION_RESULT_FAIL_GEN2_INSUFFICIENT_PRIVILEGES(13, 13),
    /**
     */
    TAG_OPERATION_RESULT_FAIL_SERIALIZATION_JOB_QUEUE_EMPTY(14, 14),
    /**
     *
     * There was no TIDTableEntry_ for this tag.
     */
    TAG_OPERATION_RESULT_FAIL_TID_TABLE_NO_MATCH(15, 15),
    /**
     *
     * The device has run out of OrderedListEntry_.
     */
    TAG_OPERATION_RESULT_FAIL_ORDERED_LIST_EMPTY(16, 16),
    /**
     *
     * This tag chip is not supported.
     */
    TAG_OPERATION_RESULT_FAIL_TAG_CHIP_NOT_SUPPORTED(17, 17),
    /**
     *
     * This tag chip is supported, but the corresponding feature
     * key  has not been installed.
     */
    TAG_OPERATION_RESULT_FAIL_TAG_CHIP_SUPPORTED_LICENSE_KEY_NOT_INSTALLED(18, 18),
    /**
     *
     * The device was expecting to see a tag (Single mode), but did
     * not.
     */
    TAG_OPERATION_RESULT_FAIL_TAG_NOT_INVENTORIED(19, 19),
    /**
     *
     * The remaining encoding volume for this tag type has
     * exhausted.
     */
    TAG_OPERATION_RESULT_FAIL_VOLUME_EXHAUSTED(20, 20),
    /**
     */
    TAG_OPERATION_RESULT_FAIL_TID_PARITY_CHECK(21, 21),
    /**
     *
     * The device has run out of serial numbers.
     */
    TAG_OPERATION_RESULT_FAIL_SERIAL_NUMBER_RANGE_EMPTY(22, 22),
    /**
     *
     * Device was configured to expect performance information
     * packet,  but did not receive one for this tid
     */
    TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_MISSING(23, 23),
    /**
     *
     * The upstream performance indicator reported that this tag
     * had  poor performance. This will only come from a tagchip
     * basic verifier who  receives a performance report that
     * declares a failure.
     */
    TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_FAILED(24, 24),
    /**
     *
     * The device attempted to void the tag, and was successful.
     */
    TAG_OPERATION_RESULT_VOID_TAG_PASS(25, 25),
    /**
     *
     * The device attempted to void the tag and failed to complete
     * the  task
     */
    TAG_OPERATION_RESULT_VOID_TAG_FAIL(26, 26),
    /**
     *
     * The encoding configuration for this tag was invalid.
     */
    TAG_OPERATION_RESULT_FAIL_TID_TABLE_INVALID_CONFIG(27, 27),
    /**
     *
     * This tag didn't match one of the configured filters.
     */
    TAG_OPERATION_RESULT_FAIL_FILTER_NO_MATCH(28, 28),
    /**
     *
     * The Volume License for this tag has been revoked. Please
     * contact Impinj Support for assistance.
     */
    TAG_OPERATION_RESULT_FAIL_VOLUME_LICENSE_REVOKED(29, 29),
    /**
     *
     * The device has detected that the backscattered EPC does not
     * match the EPC writes that were already performed.
     */
    TAG_OPERATION_RESULT_FAIL_INVENTORIED_EPC_MISMATCH(30, 30),
    /**
     *
     * The device has detected that the Monza R6P memory map was
     * previously configured to a different state than what was
     * requested.
     */
    TAG_OPERATION_RESULT_FAIL_CANNOT_CHANGE_MEMORY_MAP_CONFIG(31, 31),
    ;

    /**
     */
    public static final int TAG_OPERATION_RESULT_PASS_VALUE = 0;
    /**
     */
    public static final int TAG_OPERATION_RESULT_PASS_ALREADY_DONE_VALUE = 1;
    /**
     */
    public static final int TAG_OPERATION_RESULT_RETRY_VALUE = 2;
    /**
     */
    public static final int TAG_OPERATION_RESULT_RETRY_INSUFFICIENT_POWER_VALUE = 3;
    /**
     */
    public static final int TAG_OPERATION_RESULT_RETRY_NO_RESPONSE_FROM_TAG_VALUE = 4;
    /**
     */
    public static final int TAG_OPERATION_RESULT_RETRY_SERIALIZATION_JOB_QUEUE_EMPTY_VALUE = 5;
    /**
     */
    public static final int TAG_OPERATION_RESULT_RETRY_TID_TABLE_NO_MATCH_VALUE = 6;
    /**
     */
    public static final int TAG_OPERATION_RESULT_RETRY_ORDERED_LIST_EMPTY_VALUE = 7;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_VALUE = 8;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_INSUFFICIENT_POWER_VALUE = 9;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_NO_RESPONSE_FROM_TAG_VALUE = 10;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_LOCKED_VALUE = 11;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_MEMORY_OVERRUN_VALUE = 12;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_GEN2_INSUFFICIENT_PRIVILEGES_VALUE = 13;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_SERIALIZATION_JOB_QUEUE_EMPTY_VALUE = 14;
    /**
     *
     * There was no TIDTableEntry_ for this tag.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_TID_TABLE_NO_MATCH_VALUE = 15;
    /**
     *
     * The device has run out of OrderedListEntry_.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_ORDERED_LIST_EMPTY_VALUE = 16;
    /**
     *
     * This tag chip is not supported.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_TAG_CHIP_NOT_SUPPORTED_VALUE = 17;
    /**
     *
     * This tag chip is supported, but the corresponding feature
     * key  has not been installed.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_TAG_CHIP_SUPPORTED_LICENSE_KEY_NOT_INSTALLED_VALUE = 18;
    /**
     *
     * The device was expecting to see a tag (Single mode), but did
     * not.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_TAG_NOT_INVENTORIED_VALUE = 19;
    /**
     *
     * The remaining encoding volume for this tag type has
     * exhausted.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_VOLUME_EXHAUSTED_VALUE = 20;
    /**
     */
    public static final int TAG_OPERATION_RESULT_FAIL_TID_PARITY_CHECK_VALUE = 21;
    /**
     *
     * The device has run out of serial numbers.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_SERIAL_NUMBER_RANGE_EMPTY_VALUE = 22;
    /**
     *
     * Device was configured to expect performance information
     * packet,  but did not receive one for this tid
     */
    public static final int TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_MISSING_VALUE = 23;
    /**
     *
     * The upstream performance indicator reported that this tag
     * had  poor performance. This will only come from a tagchip
     * basic verifier who  receives a performance report that
     * declares a failure.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_FAILED_VALUE = 24;
    /**
     *
     * The device attempted to void the tag, and was successful.
     */
    public static final int TAG_OPERATION_RESULT_VOID_TAG_PASS_VALUE = 25;
    /**
     *
     * The device attempted to void the tag and failed to complete
     * the  task
     */
    public static final int TAG_OPERATION_RESULT_VOID_TAG_FAIL_VALUE = 26;
    /**
     *
     * The encoding configuration for this tag was invalid.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_TID_TABLE_INVALID_CONFIG_VALUE = 27;
    /**
     *
     * This tag didn't match one of the configured filters.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_FILTER_NO_MATCH_VALUE = 28;
    /**
     *
     * The Volume License for this tag has been revoked. Please
     * contact Impinj Support for assistance.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_VOLUME_LICENSE_REVOKED_VALUE = 29;
    /**
     *
     * The device has detected that the backscattered EPC does not
     * match the EPC writes that were already performed.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_INVENTORIED_EPC_MISMATCH_VALUE = 30;
    /**
     *
     * The device has detected that the Monza R6P memory map was
     * previously configured to a different state than what was
     * requested.
     */
    public static final int TAG_OPERATION_RESULT_FAIL_CANNOT_CHANGE_MEMORY_MAP_CONFIG_VALUE = 31;


    public final int getNumber() { return value; }

    public static TagOperationResult valueOf(int value) {
      switch (value) {
        case 0: return TAG_OPERATION_RESULT_PASS;
        case 1: return TAG_OPERATION_RESULT_PASS_ALREADY_DONE;
        case 2: return TAG_OPERATION_RESULT_RETRY;
        case 3: return TAG_OPERATION_RESULT_RETRY_INSUFFICIENT_POWER;
        case 4: return TAG_OPERATION_RESULT_RETRY_NO_RESPONSE_FROM_TAG;
        case 5: return TAG_OPERATION_RESULT_RETRY_SERIALIZATION_JOB_QUEUE_EMPTY;
        case 6: return TAG_OPERATION_RESULT_RETRY_TID_TABLE_NO_MATCH;
        case 7: return TAG_OPERATION_RESULT_RETRY_ORDERED_LIST_EMPTY;
        case 8: return TAG_OPERATION_RESULT_FAIL;
        case 9: return TAG_OPERATION_RESULT_FAIL_INSUFFICIENT_POWER;
        case 10: return TAG_OPERATION_RESULT_FAIL_NO_RESPONSE_FROM_TAG;
        case 11: return TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_LOCKED;
        case 12: return TAG_OPERATION_RESULT_FAIL_MEMORY_BANK_MEMORY_OVERRUN;
        case 13: return TAG_OPERATION_RESULT_FAIL_GEN2_INSUFFICIENT_PRIVILEGES;
        case 14: return TAG_OPERATION_RESULT_FAIL_SERIALIZATION_JOB_QUEUE_EMPTY;
        case 15: return TAG_OPERATION_RESULT_FAIL_TID_TABLE_NO_MATCH;
        case 16: return TAG_OPERATION_RESULT_FAIL_ORDERED_LIST_EMPTY;
        case 17: return TAG_OPERATION_RESULT_FAIL_TAG_CHIP_NOT_SUPPORTED;
        case 18: return TAG_OPERATION_RESULT_FAIL_TAG_CHIP_SUPPORTED_LICENSE_KEY_NOT_INSTALLED;
        case 19: return TAG_OPERATION_RESULT_FAIL_TAG_NOT_INVENTORIED;
        case 20: return TAG_OPERATION_RESULT_FAIL_VOLUME_EXHAUSTED;
        case 21: return TAG_OPERATION_RESULT_FAIL_TID_PARITY_CHECK;
        case 22: return TAG_OPERATION_RESULT_FAIL_SERIAL_NUMBER_RANGE_EMPTY;
        case 23: return TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_MISSING;
        case 24: return TAG_OPERATION_RESULT_FAIL_VOYANTIC_TEST_RESULT_FAILED;
        case 25: return TAG_OPERATION_RESULT_VOID_TAG_PASS;
        case 26: return TAG_OPERATION_RESULT_VOID_TAG_FAIL;
        case 27: return TAG_OPERATION_RESULT_FAIL_TID_TABLE_INVALID_CONFIG;
        case 28: return TAG_OPERATION_RESULT_FAIL_FILTER_NO_MATCH;
        case 29: return TAG_OPERATION_RESULT_FAIL_VOLUME_LICENSE_REVOKED;
        case 30: return TAG_OPERATION_RESULT_FAIL_INVENTORIED_EPC_MISMATCH;
        case 31: return TAG_OPERATION_RESULT_FAIL_CANNOT_CHANGE_MEMORY_MAP_CONFIG;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<TagOperationResult>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<TagOperationResult>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<TagOperationResult>() {
            public TagOperationResult findValueByNumber(int number) {
              return TagOperationResult.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(16);
    }

    private static final TagOperationResult[] VALUES = values();

    public static TagOperationResult valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private TagOperationResult(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.TagOperationResult)
  }

  /**
   * Protobuf enum {@code Impinj.STP.SerializationJobType}
   */
  public enum SerializationJobType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    SERIALIZATION_JOB_TYPE_STATIC(0, 1),
    /**
     */
    SERIALIZATION_JOB_TYPE_TID_TABLE(1, 4),
    /**
     */
    SERIALIZATION_JOB_TYPE_ORDERED_LIST(2, 5),
    ;

    /**
     */
    public static final int SERIALIZATION_JOB_TYPE_STATIC_VALUE = 1;
    /**
     */
    public static final int SERIALIZATION_JOB_TYPE_TID_TABLE_VALUE = 4;
    /**
     */
    public static final int SERIALIZATION_JOB_TYPE_ORDERED_LIST_VALUE = 5;


    public final int getNumber() { return value; }

    public static SerializationJobType valueOf(int value) {
      switch (value) {
        case 1: return SERIALIZATION_JOB_TYPE_STATIC;
        case 4: return SERIALIZATION_JOB_TYPE_TID_TABLE;
        case 5: return SERIALIZATION_JOB_TYPE_ORDERED_LIST;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SerializationJobType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<SerializationJobType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SerializationJobType>() {
            public SerializationJobType findValueByNumber(int number) {
              return SerializationJobType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(17);
    }

    private static final SerializationJobType[] VALUES = values();

    public static SerializationJobType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private SerializationJobType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.SerializationJobType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.SerializationJobCompletionCriteria}
   */
  public enum SerializationJobCompletionCriteria
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE(0, 4),
    ;

    /**
     */
    public static final int SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE_VALUE = 4;


    public final int getNumber() { return value; }

    public static SerializationJobCompletionCriteria valueOf(int value) {
      switch (value) {
        case 4: return SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SerializationJobCompletionCriteria>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<SerializationJobCompletionCriteria>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SerializationJobCompletionCriteria>() {
            public SerializationJobCompletionCriteria findValueByNumber(int number) {
              return SerializationJobCompletionCriteria.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(18);
    }

    private static final SerializationJobCompletionCriteria[] VALUES = values();

    public static SerializationJobCompletionCriteria valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private SerializationJobCompletionCriteria(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.SerializationJobCompletionCriteria)
  }

  /**
   * Protobuf enum {@code Impinj.STP.SerialNumberRangeFormat}
   *
   * Serial Number Range format specifies whether the EPC will be
   * formatted in binary coded hexadecimal or binary coded
   * decimal.
   */
  public enum SerialNumberRangeFormat
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    SERIAL_NUMBER_RANGE_FORMAT_HEX(0, 0),
    /**
     */
    SERIAL_NUMBER_RANGE_FORMAT_DEC(1, 1),
    ;

    /**
     */
    public static final int SERIAL_NUMBER_RANGE_FORMAT_HEX_VALUE = 0;
    /**
     */
    public static final int SERIAL_NUMBER_RANGE_FORMAT_DEC_VALUE = 1;


    public final int getNumber() { return value; }

    public static SerialNumberRangeFormat valueOf(int value) {
      switch (value) {
        case 0: return SERIAL_NUMBER_RANGE_FORMAT_HEX;
        case 1: return SERIAL_NUMBER_RANGE_FORMAT_DEC;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SerialNumberRangeFormat>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<SerialNumberRangeFormat>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SerialNumberRangeFormat>() {
            public SerialNumberRangeFormat findValueByNumber(int number) {
              return SerialNumberRangeFormat.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(19);
    }

    private static final SerialNumberRangeFormat[] VALUES = values();

    public static SerialNumberRangeFormat valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private SerialNumberRangeFormat(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.SerialNumberRangeFormat)
  }

  /**
   * Protobuf enum {@code Impinj.STP.PasswordGenerationMethod}
   */
  public enum PasswordGenerationMethod
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     *
     * PASSWORD_GENERATION_METHOD_DYNAMIC      = 2;
     */
    PASSWORD_GENERATION_METHOD_STATIC(0, 1),
    ;

    /**
     *
     * PASSWORD_GENERATION_METHOD_DYNAMIC      = 2;
     */
    public static final int PASSWORD_GENERATION_METHOD_STATIC_VALUE = 1;


    public final int getNumber() { return value; }

    public static PasswordGenerationMethod valueOf(int value) {
      switch (value) {
        case 1: return PASSWORD_GENERATION_METHOD_STATIC;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<PasswordGenerationMethod>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<PasswordGenerationMethod>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<PasswordGenerationMethod>() {
            public PasswordGenerationMethod findValueByNumber(int number) {
              return PasswordGenerationMethod.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(20);
    }

    private static final PasswordGenerationMethod[] VALUES = values();

    public static PasswordGenerationMethod valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private PasswordGenerationMethod(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.PasswordGenerationMethod)
  }

  /**
   * Protobuf enum {@code Impinj.STP.MonzaR6PMemoryMapConfig}
   */
  public enum MonzaR6PMemoryMapConfig
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER(0, 0),
    /**
     */
    MONZA_R6P_MEMORY_MAP_CONFIG_128_BIT_EPC_32_BIT_USER(1, 1),
    ;

    /**
     */
    public static final int MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER_VALUE = 0;
    /**
     */
    public static final int MONZA_R6P_MEMORY_MAP_CONFIG_128_BIT_EPC_32_BIT_USER_VALUE = 1;


    public final int getNumber() { return value; }

    public static MonzaR6PMemoryMapConfig valueOf(int value) {
      switch (value) {
        case 0: return MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER;
        case 1: return MONZA_R6P_MEMORY_MAP_CONFIG_128_BIT_EPC_32_BIT_USER;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<MonzaR6PMemoryMapConfig>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<MonzaR6PMemoryMapConfig>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<MonzaR6PMemoryMapConfig>() {
            public MonzaR6PMemoryMapConfig findValueByNumber(int number) {
              return MonzaR6PMemoryMapConfig.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(21);
    }

    private static final MonzaR6PMemoryMapConfig[] VALUES = values();

    public static MonzaR6PMemoryMapConfig valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private MonzaR6PMemoryMapConfig(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.MonzaR6PMemoryMapConfig)
  }

  /**
   * Protobuf enum {@code Impinj.STP.TagOperationReportType}
   */
  public enum TagOperationReportType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    TAG_OPERATION_REPORT_TYPE_INVENTORY(0, 0),
    /**
     */
    TAG_OPERATION_REPORT_TYPE_VERIFY(1, 1),
    /**
     */
    TAG_OPERATION_REPORT_TYPE_ENCODE(2, 2),
    ;

    /**
     */
    public static final int TAG_OPERATION_REPORT_TYPE_INVENTORY_VALUE = 0;
    /**
     */
    public static final int TAG_OPERATION_REPORT_TYPE_VERIFY_VALUE = 1;
    /**
     */
    public static final int TAG_OPERATION_REPORT_TYPE_ENCODE_VALUE = 2;


    public final int getNumber() { return value; }

    public static TagOperationReportType valueOf(int value) {
      switch (value) {
        case 0: return TAG_OPERATION_REPORT_TYPE_INVENTORY;
        case 1: return TAG_OPERATION_REPORT_TYPE_VERIFY;
        case 2: return TAG_OPERATION_REPORT_TYPE_ENCODE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<TagOperationReportType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<TagOperationReportType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<TagOperationReportType>() {
            public TagOperationReportType findValueByNumber(int number) {
              return TagOperationReportType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(22);
    }

    private static final TagOperationReportType[] VALUES = values();

    public static TagOperationReportType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private TagOperationReportType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.TagOperationReportType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.CartonContentsResult}
   */
  public enum CartonContentsResult
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     *
     * This indicates that the contents of this packet describes a
     * carton for which the device had good data.
     */
    CARTON_CONTENTS_RESULT_OK(0, 1),
    /**
     *
     * The stop trigger was seen for this carton, but no
     * corresponding start was seen. An example would be in a belt
     * stoppage scenario during startup
     */
    CARTON_CONTENTS_RESULT_ERROR_NO_ENTER(1, 3),
    /**
     *
     * DEPRECATED
     */
    CARTON_CONTENTS_RESULT_ERROR_NO_START(2, 2),
    ;

    /**
     *
     * This indicates that the contents of this packet describes a
     * carton for which the device had good data.
     */
    public static final int CARTON_CONTENTS_RESULT_OK_VALUE = 1;
    /**
     *
     * The stop trigger was seen for this carton, but no
     * corresponding start was seen. An example would be in a belt
     * stoppage scenario during startup
     */
    public static final int CARTON_CONTENTS_RESULT_ERROR_NO_ENTER_VALUE = 3;
    /**
     *
     * DEPRECATED
     */
    public static final int CARTON_CONTENTS_RESULT_ERROR_NO_START_VALUE = 2;


    public final int getNumber() { return value; }

    public static CartonContentsResult valueOf(int value) {
      switch (value) {
        case 1: return CARTON_CONTENTS_RESULT_OK;
        case 3: return CARTON_CONTENTS_RESULT_ERROR_NO_ENTER;
        case 2: return CARTON_CONTENTS_RESULT_ERROR_NO_START;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<CartonContentsResult>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<CartonContentsResult>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<CartonContentsResult>() {
            public CartonContentsResult findValueByNumber(int number) {
              return CartonContentsResult.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(23);
    }

    private static final CartonContentsResult[] VALUES = values();

    public static CartonContentsResult valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private CartonContentsResult(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.CartonContentsResult)
  }

  /**
   * Protobuf enum {@code Impinj.STP.CartonContentsErrorType}
   */
  public enum CartonContentsErrorType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER(0, 1),
    /**
     */
    CARTON_CONTENTS_ERROR_EXTRA_TRAILING_ENTER(1, 2),
    /**
     */
    CARTON_CONTENTS_ERROR_MISSING_LEADING_ENTER(2, 3),
    /**
     */
    CARTON_CONTENTS_ERROR_MISSING_TRAILING_ENTER(3, 4),
    ;

    /**
     */
    public static final int CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER_VALUE = 1;
    /**
     */
    public static final int CARTON_CONTENTS_ERROR_EXTRA_TRAILING_ENTER_VALUE = 2;
    /**
     */
    public static final int CARTON_CONTENTS_ERROR_MISSING_LEADING_ENTER_VALUE = 3;
    /**
     */
    public static final int CARTON_CONTENTS_ERROR_MISSING_TRAILING_ENTER_VALUE = 4;


    public final int getNumber() { return value; }

    public static CartonContentsErrorType valueOf(int value) {
      switch (value) {
        case 1: return CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER;
        case 2: return CARTON_CONTENTS_ERROR_EXTRA_TRAILING_ENTER;
        case 3: return CARTON_CONTENTS_ERROR_MISSING_LEADING_ENTER;
        case 4: return CARTON_CONTENTS_ERROR_MISSING_TRAILING_ENTER;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<CartonContentsErrorType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<CartonContentsErrorType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<CartonContentsErrorType>() {
            public CartonContentsErrorType findValueByNumber(int number) {
              return CartonContentsErrorType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(24);
    }

    private static final CartonContentsErrorType[] VALUES = values();

    public static CartonContentsErrorType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private CartonContentsErrorType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.CartonContentsErrorType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.OperationEventType}
   *
   * **NOT YET SUPPORTED**
   */
  public enum OperationEventType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    OPERATION_EVENT_TYPE_START_TRIGGER(0, 1),
    /**
     */
    OPERATION_EVENT_TYPE_STOP_TRIGGER(1, 2),
    /**
     *
     * An event for the end of the operation, and when no more
     * reports will be delivered.
     */
    OPERATION_EVENT_TYPE_COMPLETE(2, 3),
    ;

    /**
     */
    public static final int OPERATION_EVENT_TYPE_START_TRIGGER_VALUE = 1;
    /**
     */
    public static final int OPERATION_EVENT_TYPE_STOP_TRIGGER_VALUE = 2;
    /**
     *
     * An event for the end of the operation, and when no more
     * reports will be delivered.
     */
    public static final int OPERATION_EVENT_TYPE_COMPLETE_VALUE = 3;


    public final int getNumber() { return value; }

    public static OperationEventType valueOf(int value) {
      switch (value) {
        case 1: return OPERATION_EVENT_TYPE_START_TRIGGER;
        case 2: return OPERATION_EVENT_TYPE_STOP_TRIGGER;
        case 3: return OPERATION_EVENT_TYPE_COMPLETE;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<OperationEventType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<OperationEventType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<OperationEventType>() {
            public OperationEventType findValueByNumber(int number) {
              return OperationEventType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(25);
    }

    private static final OperationEventType[] VALUES = values();

    public static OperationEventType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private OperationEventType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.OperationEventType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.OperationTriggerType}
   *
   * **NOT YET SUPPORTED** The source of the operation
   * start/stop.
   */
  public enum OperationTriggerType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    OPERATION_TRIGGER_TYPE_CLIENT(0, 1),
    /**
     */
    OPERATION_TRIGGER_TYPE_GPI(1, 2),
    /**
     *
     * OPERATION_TRIGGER_TYPE_COUNT            = 3;
     */
    OPERATION_TRIGGER_TYPE_TIMEOUT(2, 4),
    ;

    /**
     */
    public static final int OPERATION_TRIGGER_TYPE_CLIENT_VALUE = 1;
    /**
     */
    public static final int OPERATION_TRIGGER_TYPE_GPI_VALUE = 2;
    /**
     *
     * OPERATION_TRIGGER_TYPE_COUNT            = 3;
     */
    public static final int OPERATION_TRIGGER_TYPE_TIMEOUT_VALUE = 4;


    public final int getNumber() { return value; }

    public static OperationTriggerType valueOf(int value) {
      switch (value) {
        case 1: return OPERATION_TRIGGER_TYPE_CLIENT;
        case 2: return OPERATION_TRIGGER_TYPE_GPI;
        case 4: return OPERATION_TRIGGER_TYPE_TIMEOUT;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<OperationTriggerType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<OperationTriggerType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<OperationTriggerType>() {
            public OperationTriggerType findValueByNumber(int number) {
              return OperationTriggerType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(26);
    }

    private static final OperationTriggerType[] VALUES = values();

    public static OperationTriggerType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private OperationTriggerType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.OperationTriggerType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.DeviceExceptionEventType}
   *
   * **NOT YET SUPPORTED**
   */
  public enum DeviceExceptionEventType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN(0, 1),
    /**
     */
    DEVICE_EXCEPTION_EVENT_TYPE_SYSTEM_FAULT(1, 2),
    /**
     *
     * Generated when a GPI start trigger fires before STP is done
     * with the current operation and returned to the engaged
     * state.
     */
    DEVICE_EXCEPTION_EVENT_TYPE_OPERATION_START_TRIGGER_FAULT(2, 3),
    ;

    /**
     */
    public static final int DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN_VALUE = 1;
    /**
     */
    public static final int DEVICE_EXCEPTION_EVENT_TYPE_SYSTEM_FAULT_VALUE = 2;
    /**
     *
     * Generated when a GPI start trigger fires before STP is done
     * with the current operation and returned to the engaged
     * state.
     */
    public static final int DEVICE_EXCEPTION_EVENT_TYPE_OPERATION_START_TRIGGER_FAULT_VALUE = 3;


    public final int getNumber() { return value; }

    public static DeviceExceptionEventType valueOf(int value) {
      switch (value) {
        case 1: return DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN;
        case 2: return DEVICE_EXCEPTION_EVENT_TYPE_SYSTEM_FAULT;
        case 3: return DEVICE_EXCEPTION_EVENT_TYPE_OPERATION_START_TRIGGER_FAULT;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<DeviceExceptionEventType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<DeviceExceptionEventType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<DeviceExceptionEventType>() {
            public DeviceExceptionEventType findValueByNumber(int number) {
              return DeviceExceptionEventType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(27);
    }

    private static final DeviceExceptionEventType[] VALUES = values();

    public static DeviceExceptionEventType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private DeviceExceptionEventType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.DeviceExceptionEventType)
  }

  /**
   * Protobuf enum {@code Impinj.STP.LowEncodeVolumeEventType}
   */
  public enum LowEncodeVolumeEventType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     */
    LOW_ENCODE_VOLUME_EVENT_MONZA(0, 1),
    /**
     */
    LOW_ENCODE_VOLUME_EVENT_NON_MONZA(1, 2),
    ;

    /**
     */
    public static final int LOW_ENCODE_VOLUME_EVENT_MONZA_VALUE = 1;
    /**
     */
    public static final int LOW_ENCODE_VOLUME_EVENT_NON_MONZA_VALUE = 2;


    public final int getNumber() { return value; }

    public static LowEncodeVolumeEventType valueOf(int value) {
      switch (value) {
        case 1: return LOW_ENCODE_VOLUME_EVENT_MONZA;
        case 2: return LOW_ENCODE_VOLUME_EVENT_NON_MONZA;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<LowEncodeVolumeEventType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static com.google.protobuf.Internal.EnumLiteMap<LowEncodeVolumeEventType>
        internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<LowEncodeVolumeEventType>() {
            public LowEncodeVolumeEventType findValueByNumber(int number) {
              return LowEncodeVolumeEventType.valueOf(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(index);
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.getDescriptor().getEnumTypes().get(28);
    }

    private static final LowEncodeVolumeEventType[] VALUES = values();

    public static LowEncodeVolumeEventType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int index;
    private final int value;

    private LowEncodeVolumeEventType(int index, int value) {
      this.index = index;
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Impinj.STP.LowEncodeVolumeEventType)
  }

  public interface ReplyOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.ErrorCode error_code = 1;
    /**
     */
    boolean hasErrorCode();
    /**
     */
    com.impinj.stp.StpApi.ErrorCode getErrorCode();

    // optional string error_string = 2;
    /**
     *
     * Human-readable text describing what happened.
     */
    boolean hasErrorString();
    /**
     *
     * Human-readable text describing what happened.
     */
    java.lang.String getErrorString();
    /**
     *
     * Human-readable text describing what happened.
     */
    com.google.protobuf.ByteString
        getErrorStringBytes();
  }
  /**
   * Protobuf type {@code Impinj.STP.Reply}
   *
   * A response sent by all commands.
   */
  public static final class Reply extends
      com.google.protobuf.GeneratedMessage
      implements ReplyOrBuilder {
    // Use Reply.newBuilder() to construct.
    private Reply(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Reply(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Reply defaultInstance;
    public static Reply getDefaultInstance() {
      return defaultInstance;
    }

    public Reply getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Reply(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.ErrorCode value = com.impinj.stp.StpApi.ErrorCode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                errorCode_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              errorString_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Reply_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Reply_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Reply.class, com.impinj.stp.StpApi.Reply.Builder.class);
    }

    public static com.google.protobuf.Parser<Reply> PARSER =
        new com.google.protobuf.AbstractParser<Reply>() {
      public Reply parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Reply(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Reply> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.ErrorCode error_code = 1;
    public static final int ERROR_CODE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.ErrorCode errorCode_;
    /**
     */
    public boolean hasErrorCode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.ErrorCode getErrorCode() {
      return errorCode_;
    }

    // optional string error_string = 2;
    public static final int ERROR_STRING_FIELD_NUMBER = 2;
    private java.lang.Object errorString_;
    /**
     *
     * Human-readable text describing what happened.
     */
    public boolean hasErrorString() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Human-readable text describing what happened.
     */
    public java.lang.String getErrorString() {
      java.lang.Object ref = errorString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          errorString_ = s;
        }
        return s;
      }
    }
    /**
     *
     * Human-readable text describing what happened.
     */
    public com.google.protobuf.ByteString
        getErrorStringBytes() {
      java.lang.Object ref = errorString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      errorCode_ = com.impinj.stp.StpApi.ErrorCode.ERROR_CODE_SUCCESS;
      errorString_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasErrorCode()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, errorCode_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getErrorStringBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, errorCode_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getErrorStringBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Reply parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Reply parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Reply parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Reply parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Reply parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Reply parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Reply parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Reply parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Reply parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Reply parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Reply prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Reply}
     *
     * A response sent by all commands.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.ReplyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Reply_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Reply_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Reply.class, com.impinj.stp.StpApi.Reply.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Reply.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        errorCode_ = com.impinj.stp.StpApi.ErrorCode.ERROR_CODE_SUCCESS;
        bitField0_ = (bitField0_ & ~0x00000001);
        errorString_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Reply_descriptor;
      }

      public com.impinj.stp.StpApi.Reply getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Reply.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Reply build() {
        com.impinj.stp.StpApi.Reply result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Reply buildPartial() {
        com.impinj.stp.StpApi.Reply result = new com.impinj.stp.StpApi.Reply(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.errorCode_ = errorCode_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.errorString_ = errorString_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Reply) {
          return mergeFrom((com.impinj.stp.StpApi.Reply)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Reply other) {
        if (other == com.impinj.stp.StpApi.Reply.getDefaultInstance()) return this;
        if (other.hasErrorCode()) {
          setErrorCode(other.getErrorCode());
        }
        if (other.hasErrorString()) {
          bitField0_ |= 0x00000002;
          errorString_ = other.errorString_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasErrorCode()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Reply parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Reply) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.ErrorCode error_code = 1;
      private com.impinj.stp.StpApi.ErrorCode errorCode_ = com.impinj.stp.StpApi.ErrorCode.ERROR_CODE_SUCCESS;
      /**
       */
      public boolean hasErrorCode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.ErrorCode getErrorCode() {
        return errorCode_;
      }
      /**
       */
      public Builder setErrorCode(com.impinj.stp.StpApi.ErrorCode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        errorCode_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearErrorCode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        errorCode_ = com.impinj.stp.StpApi.ErrorCode.ERROR_CODE_SUCCESS;
        onChanged();
        return this;
      }

      // optional string error_string = 2;
      private java.lang.Object errorString_ = "";
      /**
       *
       * Human-readable text describing what happened.
       */
      public boolean hasErrorString() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Human-readable text describing what happened.
       */
      public java.lang.String getErrorString() {
        java.lang.Object ref = errorString_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          errorString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       * Human-readable text describing what happened.
       */
      public com.google.protobuf.ByteString
          getErrorStringBytes() {
        java.lang.Object ref = errorString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       * Human-readable text describing what happened.
       */
      public Builder setErrorString(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        errorString_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Human-readable text describing what happened.
       */
      public Builder clearErrorString() {
        bitField0_ = (bitField0_ & ~0x00000002);
        errorString_ = getDefaultInstance().getErrorString();
        onChanged();
        return this;
      }
      /**
       *
       * Human-readable text describing what happened.
       */
      public Builder setErrorStringBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        errorString_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Reply)
    }

    static {
      defaultInstance = new Reply(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Reply)
  }

  public interface DeviceStateOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.DeviceOperatingState device_operating_state = 1;
    /**
     */
    boolean hasDeviceOperatingState();
    /**
     */
    com.impinj.stp.StpApi.DeviceOperatingState getDeviceOperatingState();

    // optional .Impinj.STP.DeviceFaultType device_fault = 2;
    /**
     */
    boolean hasDeviceFault();
    /**
     */
    com.impinj.stp.StpApi.DeviceFaultType getDeviceFault();

    // optional string fault_details = 3;
    /**
     */
    boolean hasFaultDetails();
    /**
     */
    java.lang.String getFaultDetails();
    /**
     */
    com.google.protobuf.ByteString
        getFaultDetailsBytes();
  }
  /**
   * Protobuf type {@code Impinj.STP.DeviceState}
   *
   * The health or fault state of the device.
   */
  public static final class DeviceState extends
      com.google.protobuf.GeneratedMessage
      implements DeviceStateOrBuilder {
    // Use DeviceState.newBuilder() to construct.
    private DeviceState(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeviceState(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DeviceState defaultInstance;
    public static DeviceState getDefaultInstance() {
      return defaultInstance;
    }

    public DeviceState getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceState(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.DeviceOperatingState value = com.impinj.stp.StpApi.DeviceOperatingState.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                deviceOperatingState_ = value;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.DeviceFaultType value = com.impinj.stp.StpApi.DeviceFaultType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                deviceFault_ = value;
              }
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              faultDetails_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceState_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.DeviceState.class, com.impinj.stp.StpApi.DeviceState.Builder.class);
    }

    public static com.google.protobuf.Parser<DeviceState> PARSER =
        new com.google.protobuf.AbstractParser<DeviceState>() {
      public DeviceState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeviceState(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DeviceState> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.DeviceOperatingState device_operating_state = 1;
    public static final int DEVICE_OPERATING_STATE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.DeviceOperatingState deviceOperatingState_;
    /**
     */
    public boolean hasDeviceOperatingState() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceOperatingState getDeviceOperatingState() {
      return deviceOperatingState_;
    }

    // optional .Impinj.STP.DeviceFaultType device_fault = 2;
    public static final int DEVICE_FAULT_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.DeviceFaultType deviceFault_;
    /**
     */
    public boolean hasDeviceFault() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceFaultType getDeviceFault() {
      return deviceFault_;
    }

    // optional string fault_details = 3;
    public static final int FAULT_DETAILS_FIELD_NUMBER = 3;
    private java.lang.Object faultDetails_;
    /**
     */
    public boolean hasFaultDetails() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public java.lang.String getFaultDetails() {
      java.lang.Object ref = faultDetails_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          faultDetails_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getFaultDetailsBytes() {
      java.lang.Object ref = faultDetails_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        faultDetails_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      deviceOperatingState_ = com.impinj.stp.StpApi.DeviceOperatingState.DEVICE_OPERATING_STATE_READY;
      deviceFault_ = com.impinj.stp.StpApi.DeviceFaultType.DEVICE_FAULT_TYPE_NONE;
      faultDetails_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, deviceOperatingState_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, deviceFault_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getFaultDetailsBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, deviceOperatingState_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, deviceFault_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getFaultDetailsBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.DeviceState parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceState parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceState parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceState parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceState parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceState parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceState parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceState parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceState parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceState parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.DeviceState prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.DeviceState}
     *
     * The health or fault state of the device.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.DeviceStateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceState_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.DeviceState.class, com.impinj.stp.StpApi.DeviceState.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.DeviceState.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        deviceOperatingState_ = com.impinj.stp.StpApi.DeviceOperatingState.DEVICE_OPERATING_STATE_READY;
        bitField0_ = (bitField0_ & ~0x00000001);
        deviceFault_ = com.impinj.stp.StpApi.DeviceFaultType.DEVICE_FAULT_TYPE_NONE;
        bitField0_ = (bitField0_ & ~0x00000002);
        faultDetails_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceState_descriptor;
      }

      public com.impinj.stp.StpApi.DeviceState getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.DeviceState.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.DeviceState build() {
        com.impinj.stp.StpApi.DeviceState result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.DeviceState buildPartial() {
        com.impinj.stp.StpApi.DeviceState result = new com.impinj.stp.StpApi.DeviceState(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.deviceOperatingState_ = deviceOperatingState_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.deviceFault_ = deviceFault_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.faultDetails_ = faultDetails_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.DeviceState) {
          return mergeFrom((com.impinj.stp.StpApi.DeviceState)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.DeviceState other) {
        if (other == com.impinj.stp.StpApi.DeviceState.getDefaultInstance()) return this;
        if (other.hasDeviceOperatingState()) {
          setDeviceOperatingState(other.getDeviceOperatingState());
        }
        if (other.hasDeviceFault()) {
          setDeviceFault(other.getDeviceFault());
        }
        if (other.hasFaultDetails()) {
          bitField0_ |= 0x00000004;
          faultDetails_ = other.faultDetails_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.DeviceState parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.DeviceState) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.DeviceOperatingState device_operating_state = 1;
      private com.impinj.stp.StpApi.DeviceOperatingState deviceOperatingState_ = com.impinj.stp.StpApi.DeviceOperatingState.DEVICE_OPERATING_STATE_READY;
      /**
       */
      public boolean hasDeviceOperatingState() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceOperatingState getDeviceOperatingState() {
        return deviceOperatingState_;
      }
      /**
       */
      public Builder setDeviceOperatingState(com.impinj.stp.StpApi.DeviceOperatingState value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        deviceOperatingState_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearDeviceOperatingState() {
        bitField0_ = (bitField0_ & ~0x00000001);
        deviceOperatingState_ = com.impinj.stp.StpApi.DeviceOperatingState.DEVICE_OPERATING_STATE_READY;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.DeviceFaultType device_fault = 2;
      private com.impinj.stp.StpApi.DeviceFaultType deviceFault_ = com.impinj.stp.StpApi.DeviceFaultType.DEVICE_FAULT_TYPE_NONE;
      /**
       */
      public boolean hasDeviceFault() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceFaultType getDeviceFault() {
        return deviceFault_;
      }
      /**
       */
      public Builder setDeviceFault(com.impinj.stp.StpApi.DeviceFaultType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        deviceFault_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearDeviceFault() {
        bitField0_ = (bitField0_ & ~0x00000002);
        deviceFault_ = com.impinj.stp.StpApi.DeviceFaultType.DEVICE_FAULT_TYPE_NONE;
        onChanged();
        return this;
      }

      // optional string fault_details = 3;
      private java.lang.Object faultDetails_ = "";
      /**
       */
      public boolean hasFaultDetails() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public java.lang.String getFaultDetails() {
        java.lang.Object ref = faultDetails_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          faultDetails_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getFaultDetailsBytes() {
        java.lang.Object ref = faultDetails_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          faultDetails_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setFaultDetails(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        faultDetails_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearFaultDetails() {
        bitField0_ = (bitField0_ & ~0x00000004);
        faultDetails_ = getDefaultInstance().getFaultDetails();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setFaultDetailsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        faultDetails_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.DeviceState)
    }

    static {
      defaultInstance = new DeviceState(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.DeviceState)
  }

  public interface VersionOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.VersionType version_ID = 1;
    /**
     */
    boolean hasVersionID();
    /**
     */
    com.impinj.stp.StpApi.VersionType getVersionID();

    // optional uint32 major = 2;
    /**
     *
     * Also used for single number versions.
     */
    boolean hasMajor();
    /**
     *
     * Also used for single number versions.
     */
    int getMajor();

    // optional uint32 minor = 3;
    /**
     */
    boolean hasMinor();
    /**
     */
    int getMinor();

    // optional uint32 maintenance = 4;
    /**
     */
    boolean hasMaintenance();
    /**
     */
    int getMaintenance();

    // optional uint32 build = 5;
    /**
     */
    boolean hasBuild();
    /**
     */
    int getBuild();

    // optional string ident = 6;
    /**
     *
     * A semicolon-separated list of additional version
     * information, such as the name of the component and if a
     * "Final" or "Dev" build was done.
     */
    boolean hasIdent();
    /**
     *
     * A semicolon-separated list of additional version
     * information, such as the name of the component and if a
     * "Final" or "Dev" build was done.
     */
    java.lang.String getIdent();
    /**
     *
     * A semicolon-separated list of additional version
     * information, such as the name of the component and if a
     * "Final" or "Dev" build was done.
     */
    com.google.protobuf.ByteString
        getIdentBytes();
  }
  /**
   * Protobuf type {@code Impinj.STP.Version}
   *
   * A version of part of the system. The version number is
   * usually in the form "major.minor.maintenance.build-ident".
   */
  public static final class Version extends
      com.google.protobuf.GeneratedMessage
      implements VersionOrBuilder {
    // Use Version.newBuilder() to construct.
    private Version(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Version(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Version defaultInstance;
    public static Version getDefaultInstance() {
      return defaultInstance;
    }

    public Version getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Version(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.VersionType value = com.impinj.stp.StpApi.VersionType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                versionID_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              major_ = input.readUInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              minor_ = input.readUInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              maintenance_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              build_ = input.readUInt32();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              ident_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Version_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Version_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Version.class, com.impinj.stp.StpApi.Version.Builder.class);
    }

    public static com.google.protobuf.Parser<Version> PARSER =
        new com.google.protobuf.AbstractParser<Version>() {
      public Version parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Version(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Version> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.VersionType version_ID = 1;
    public static final int VERSION_ID_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.VersionType versionID_;
    /**
     */
    public boolean hasVersionID() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.VersionType getVersionID() {
      return versionID_;
    }

    // optional uint32 major = 2;
    public static final int MAJOR_FIELD_NUMBER = 2;
    private int major_;
    /**
     *
     * Also used for single number versions.
     */
    public boolean hasMajor() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Also used for single number versions.
     */
    public int getMajor() {
      return major_;
    }

    // optional uint32 minor = 3;
    public static final int MINOR_FIELD_NUMBER = 3;
    private int minor_;
    /**
     */
    public boolean hasMinor() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public int getMinor() {
      return minor_;
    }

    // optional uint32 maintenance = 4;
    public static final int MAINTENANCE_FIELD_NUMBER = 4;
    private int maintenance_;
    /**
     */
    public boolean hasMaintenance() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public int getMaintenance() {
      return maintenance_;
    }

    // optional uint32 build = 5;
    public static final int BUILD_FIELD_NUMBER = 5;
    private int build_;
    /**
     */
    public boolean hasBuild() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public int getBuild() {
      return build_;
    }

    // optional string ident = 6;
    public static final int IDENT_FIELD_NUMBER = 6;
    private java.lang.Object ident_;
    /**
     *
     * A semicolon-separated list of additional version
     * information, such as the name of the component and if a
     * "Final" or "Dev" build was done.
     */
    public boolean hasIdent() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * A semicolon-separated list of additional version
     * information, such as the name of the component and if a
     * "Final" or "Dev" build was done.
     */
    public java.lang.String getIdent() {
      java.lang.Object ref = ident_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          ident_ = s;
        }
        return s;
      }
    }
    /**
     *
     * A semicolon-separated list of additional version
     * information, such as the name of the component and if a
     * "Final" or "Dev" build was done.
     */
    public com.google.protobuf.ByteString
        getIdentBytes() {
      java.lang.Object ref = ident_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        ident_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      versionID_ = com.impinj.stp.StpApi.VersionType.VERSION_TYPE_KODIAK_HOST;
      major_ = 0;
      minor_ = 0;
      maintenance_ = 0;
      build_ = 0;
      ident_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasVersionID()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, versionID_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, major_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(3, minor_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, maintenance_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt32(5, build_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getIdentBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, versionID_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, major_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, minor_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, maintenance_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, build_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getIdentBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Version parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Version parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Version parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Version parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Version parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Version parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Version parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Version parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Version parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Version parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Version prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Version}
     *
     * A version of part of the system. The version number is
     * usually in the form "major.minor.maintenance.build-ident".
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.VersionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Version_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Version_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Version.class, com.impinj.stp.StpApi.Version.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Version.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        versionID_ = com.impinj.stp.StpApi.VersionType.VERSION_TYPE_KODIAK_HOST;
        bitField0_ = (bitField0_ & ~0x00000001);
        major_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        minor_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        maintenance_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        build_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        ident_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Version_descriptor;
      }

      public com.impinj.stp.StpApi.Version getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Version.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Version build() {
        com.impinj.stp.StpApi.Version result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Version buildPartial() {
        com.impinj.stp.StpApi.Version result = new com.impinj.stp.StpApi.Version(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.versionID_ = versionID_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.major_ = major_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.minor_ = minor_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.maintenance_ = maintenance_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.build_ = build_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.ident_ = ident_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Version) {
          return mergeFrom((com.impinj.stp.StpApi.Version)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Version other) {
        if (other == com.impinj.stp.StpApi.Version.getDefaultInstance()) return this;
        if (other.hasVersionID()) {
          setVersionID(other.getVersionID());
        }
        if (other.hasMajor()) {
          setMajor(other.getMajor());
        }
        if (other.hasMinor()) {
          setMinor(other.getMinor());
        }
        if (other.hasMaintenance()) {
          setMaintenance(other.getMaintenance());
        }
        if (other.hasBuild()) {
          setBuild(other.getBuild());
        }
        if (other.hasIdent()) {
          bitField0_ |= 0x00000020;
          ident_ = other.ident_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasVersionID()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Version parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Version) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.VersionType version_ID = 1;
      private com.impinj.stp.StpApi.VersionType versionID_ = com.impinj.stp.StpApi.VersionType.VERSION_TYPE_KODIAK_HOST;
      /**
       */
      public boolean hasVersionID() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.VersionType getVersionID() {
        return versionID_;
      }
      /**
       */
      public Builder setVersionID(com.impinj.stp.StpApi.VersionType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        versionID_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearVersionID() {
        bitField0_ = (bitField0_ & ~0x00000001);
        versionID_ = com.impinj.stp.StpApi.VersionType.VERSION_TYPE_KODIAK_HOST;
        onChanged();
        return this;
      }

      // optional uint32 major = 2;
      private int major_ ;
      /**
       *
       * Also used for single number versions.
       */
      public boolean hasMajor() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Also used for single number versions.
       */
      public int getMajor() {
        return major_;
      }
      /**
       *
       * Also used for single number versions.
       */
      public Builder setMajor(int value) {
        bitField0_ |= 0x00000002;
        major_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Also used for single number versions.
       */
      public Builder clearMajor() {
        bitField0_ = (bitField0_ & ~0x00000002);
        major_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 minor = 3;
      private int minor_ ;
      /**
       */
      public boolean hasMinor() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public int getMinor() {
        return minor_;
      }
      /**
       */
      public Builder setMinor(int value) {
        bitField0_ |= 0x00000004;
        minor_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearMinor() {
        bitField0_ = (bitField0_ & ~0x00000004);
        minor_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 maintenance = 4;
      private int maintenance_ ;
      /**
       */
      public boolean hasMaintenance() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public int getMaintenance() {
        return maintenance_;
      }
      /**
       */
      public Builder setMaintenance(int value) {
        bitField0_ |= 0x00000008;
        maintenance_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearMaintenance() {
        bitField0_ = (bitField0_ & ~0x00000008);
        maintenance_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 build = 5;
      private int build_ ;
      /**
       */
      public boolean hasBuild() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public int getBuild() {
        return build_;
      }
      /**
       */
      public Builder setBuild(int value) {
        bitField0_ |= 0x00000010;
        build_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearBuild() {
        bitField0_ = (bitField0_ & ~0x00000010);
        build_ = 0;
        onChanged();
        return this;
      }

      // optional string ident = 6;
      private java.lang.Object ident_ = "";
      /**
       *
       * A semicolon-separated list of additional version
       * information, such as the name of the component and if a
       * "Final" or "Dev" build was done.
       */
      public boolean hasIdent() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       *
       * A semicolon-separated list of additional version
       * information, such as the name of the component and if a
       * "Final" or "Dev" build was done.
       */
      public java.lang.String getIdent() {
        java.lang.Object ref = ident_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          ident_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       * A semicolon-separated list of additional version
       * information, such as the name of the component and if a
       * "Final" or "Dev" build was done.
       */
      public com.google.protobuf.ByteString
          getIdentBytes() {
        java.lang.Object ref = ident_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ident_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       * A semicolon-separated list of additional version
       * information, such as the name of the component and if a
       * "Final" or "Dev" build was done.
       */
      public Builder setIdent(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        ident_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * A semicolon-separated list of additional version
       * information, such as the name of the component and if a
       * "Final" or "Dev" build was done.
       */
      public Builder clearIdent() {
        bitField0_ = (bitField0_ & ~0x00000020);
        ident_ = getDefaultInstance().getIdent();
        onChanged();
        return this;
      }
      /**
       *
       * A semicolon-separated list of additional version
       * information, such as the name of the component and if a
       * "Final" or "Dev" build was done.
       */
      public Builder setIdentBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        ident_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Version)
    }

    static {
      defaultInstance = new Version(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Version)
  }

  public interface VersionsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .Impinj.STP.Version version_list = 1;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.Version> 
        getVersionListList();
    /**
     */
    com.impinj.stp.StpApi.Version getVersionList(int index);
    /**
     */
    int getVersionListCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.VersionOrBuilder> 
        getVersionListOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.VersionOrBuilder getVersionListOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code Impinj.STP.Versions}
   *
   * A list of local API library and device versions.
   */
  public static final class Versions extends
      com.google.protobuf.GeneratedMessage
      implements VersionsOrBuilder {
    // Use Versions.newBuilder() to construct.
    private Versions(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Versions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Versions defaultInstance;
    public static Versions getDefaultInstance() {
      return defaultInstance;
    }

    public Versions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Versions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                versionList_ = new java.util.ArrayList<com.impinj.stp.StpApi.Version>();
                mutable_bitField0_ |= 0x00000001;
              }
              versionList_.add(input.readMessage(com.impinj.stp.StpApi.Version.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          versionList_ = java.util.Collections.unmodifiableList(versionList_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Versions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Versions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Versions.class, com.impinj.stp.StpApi.Versions.Builder.class);
    }

    public static com.google.protobuf.Parser<Versions> PARSER =
        new com.google.protobuf.AbstractParser<Versions>() {
      public Versions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Versions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Versions> getParserForType() {
      return PARSER;
    }

    // repeated .Impinj.STP.Version version_list = 1;
    public static final int VERSION_LIST_FIELD_NUMBER = 1;
    private java.util.List<com.impinj.stp.StpApi.Version> versionList_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.Version> getVersionListList() {
      return versionList_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.VersionOrBuilder> 
        getVersionListOrBuilderList() {
      return versionList_;
    }
    /**
     */
    public int getVersionListCount() {
      return versionList_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.Version getVersionList(int index) {
      return versionList_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.VersionOrBuilder getVersionListOrBuilder(
        int index) {
      return versionList_.get(index);
    }

    private void initFields() {
      versionList_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      for (int i = 0; i < getVersionListCount(); i++) {
        if (!getVersionList(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < versionList_.size(); i++) {
        output.writeMessage(1, versionList_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < versionList_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, versionList_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Versions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Versions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Versions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Versions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Versions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Versions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Versions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Versions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Versions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Versions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Versions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Versions}
     *
     * A list of local API library and device versions.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.VersionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Versions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Versions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Versions.class, com.impinj.stp.StpApi.Versions.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Versions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getVersionListFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (versionListBuilder_ == null) {
          versionList_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          versionListBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Versions_descriptor;
      }

      public com.impinj.stp.StpApi.Versions getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Versions.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Versions build() {
        com.impinj.stp.StpApi.Versions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Versions buildPartial() {
        com.impinj.stp.StpApi.Versions result = new com.impinj.stp.StpApi.Versions(this);
        int from_bitField0_ = bitField0_;
        if (versionListBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            versionList_ = java.util.Collections.unmodifiableList(versionList_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.versionList_ = versionList_;
        } else {
          result.versionList_ = versionListBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Versions) {
          return mergeFrom((com.impinj.stp.StpApi.Versions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Versions other) {
        if (other == com.impinj.stp.StpApi.Versions.getDefaultInstance()) return this;
        if (versionListBuilder_ == null) {
          if (!other.versionList_.isEmpty()) {
            if (versionList_.isEmpty()) {
              versionList_ = other.versionList_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureVersionListIsMutable();
              versionList_.addAll(other.versionList_);
            }
            onChanged();
          }
        } else {
          if (!other.versionList_.isEmpty()) {
            if (versionListBuilder_.isEmpty()) {
              versionListBuilder_.dispose();
              versionListBuilder_ = null;
              versionList_ = other.versionList_;
              bitField0_ = (bitField0_ & ~0x00000001);
              versionListBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getVersionListFieldBuilder() : null;
            } else {
              versionListBuilder_.addAllMessages(other.versionList_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getVersionListCount(); i++) {
          if (!getVersionList(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Versions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Versions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .Impinj.STP.Version version_list = 1;
      private java.util.List<com.impinj.stp.StpApi.Version> versionList_ =
        java.util.Collections.emptyList();
      private void ensureVersionListIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          versionList_ = new java.util.ArrayList<com.impinj.stp.StpApi.Version>(versionList_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.Version, com.impinj.stp.StpApi.Version.Builder, com.impinj.stp.StpApi.VersionOrBuilder> versionListBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.Version> getVersionListList() {
        if (versionListBuilder_ == null) {
          return java.util.Collections.unmodifiableList(versionList_);
        } else {
          return versionListBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getVersionListCount() {
        if (versionListBuilder_ == null) {
          return versionList_.size();
        } else {
          return versionListBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.Version getVersionList(int index) {
        if (versionListBuilder_ == null) {
          return versionList_.get(index);
        } else {
          return versionListBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setVersionList(
          int index, com.impinj.stp.StpApi.Version value) {
        if (versionListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVersionListIsMutable();
          versionList_.set(index, value);
          onChanged();
        } else {
          versionListBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setVersionList(
          int index, com.impinj.stp.StpApi.Version.Builder builderForValue) {
        if (versionListBuilder_ == null) {
          ensureVersionListIsMutable();
          versionList_.set(index, builderForValue.build());
          onChanged();
        } else {
          versionListBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addVersionList(com.impinj.stp.StpApi.Version value) {
        if (versionListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVersionListIsMutable();
          versionList_.add(value);
          onChanged();
        } else {
          versionListBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addVersionList(
          int index, com.impinj.stp.StpApi.Version value) {
        if (versionListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVersionListIsMutable();
          versionList_.add(index, value);
          onChanged();
        } else {
          versionListBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addVersionList(
          com.impinj.stp.StpApi.Version.Builder builderForValue) {
        if (versionListBuilder_ == null) {
          ensureVersionListIsMutable();
          versionList_.add(builderForValue.build());
          onChanged();
        } else {
          versionListBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addVersionList(
          int index, com.impinj.stp.StpApi.Version.Builder builderForValue) {
        if (versionListBuilder_ == null) {
          ensureVersionListIsMutable();
          versionList_.add(index, builderForValue.build());
          onChanged();
        } else {
          versionListBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllVersionList(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.Version> values) {
        if (versionListBuilder_ == null) {
          ensureVersionListIsMutable();
          super.addAll(values, versionList_);
          onChanged();
        } else {
          versionListBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearVersionList() {
        if (versionListBuilder_ == null) {
          versionList_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          versionListBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeVersionList(int index) {
        if (versionListBuilder_ == null) {
          ensureVersionListIsMutable();
          versionList_.remove(index);
          onChanged();
        } else {
          versionListBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Version.Builder getVersionListBuilder(
          int index) {
        return getVersionListFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.VersionOrBuilder getVersionListOrBuilder(
          int index) {
        if (versionListBuilder_ == null) {
          return versionList_.get(index);  } else {
          return versionListBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.VersionOrBuilder> 
           getVersionListOrBuilderList() {
        if (versionListBuilder_ != null) {
          return versionListBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(versionList_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.Version.Builder addVersionListBuilder() {
        return getVersionListFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.Version.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.Version.Builder addVersionListBuilder(
          int index) {
        return getVersionListFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.Version.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.Version.Builder> 
           getVersionListBuilderList() {
        return getVersionListFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.Version, com.impinj.stp.StpApi.Version.Builder, com.impinj.stp.StpApi.VersionOrBuilder> 
          getVersionListFieldBuilder() {
        if (versionListBuilder_ == null) {
          versionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.Version, com.impinj.stp.StpApi.Version.Builder, com.impinj.stp.StpApi.VersionOrBuilder>(
                  versionList_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          versionList_ = null;
        }
        return versionListBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Versions)
    }

    static {
      defaultInstance = new Versions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Versions)
  }

  public interface HandShakeOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required string API_name = 1;
    /**
     */
    boolean hasAPIName();
    /**
     */
    java.lang.String getAPIName();
    /**
     */
    com.google.protobuf.ByteString
        getAPINameBytes();

    // required uint32 API_version = 2;
    /**
     */
    boolean hasAPIVersion();
    /**
     */
    int getAPIVersion();
  }
  /**
   * Protobuf type {@code Impinj.STP.HandShake}
   *
   * API description sent as part of the connection. The client
   * app does not need to create or send this message.
   */
  public static final class HandShake extends
      com.google.protobuf.GeneratedMessage
      implements HandShakeOrBuilder {
    // Use HandShake.newBuilder() to construct.
    private HandShake(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private HandShake(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final HandShake defaultInstance;
    public static HandShake getDefaultInstance() {
      return defaultInstance;
    }

    public HandShake getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private HandShake(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              aPIName_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              aPIVersion_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_HandShake_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_HandShake_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.HandShake.class, com.impinj.stp.StpApi.HandShake.Builder.class);
    }

    public static com.google.protobuf.Parser<HandShake> PARSER =
        new com.google.protobuf.AbstractParser<HandShake>() {
      public HandShake parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HandShake(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<HandShake> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required string API_name = 1;
    public static final int API_NAME_FIELD_NUMBER = 1;
    private java.lang.Object aPIName_;
    /**
     */
    public boolean hasAPIName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public java.lang.String getAPIName() {
      java.lang.Object ref = aPIName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          aPIName_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getAPINameBytes() {
      java.lang.Object ref = aPIName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        aPIName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // required uint32 API_version = 2;
    public static final int API_VERSION_FIELD_NUMBER = 2;
    private int aPIVersion_;
    /**
     */
    public boolean hasAPIVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public int getAPIVersion() {
      return aPIVersion_;
    }

    private void initFields() {
      aPIName_ = "";
      aPIVersion_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasAPIName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAPIVersion()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getAPINameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, aPIVersion_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getAPINameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, aPIVersion_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.HandShake parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.HandShake parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.HandShake parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.HandShake parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.HandShake parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.HandShake parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.HandShake parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.HandShake parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.HandShake parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.HandShake parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.HandShake prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.HandShake}
     *
     * API description sent as part of the connection. The client
     * app does not need to create or send this message.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.HandShakeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_HandShake_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_HandShake_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.HandShake.class, com.impinj.stp.StpApi.HandShake.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.HandShake.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        aPIName_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        aPIVersion_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_HandShake_descriptor;
      }

      public com.impinj.stp.StpApi.HandShake getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.HandShake.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.HandShake build() {
        com.impinj.stp.StpApi.HandShake result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.HandShake buildPartial() {
        com.impinj.stp.StpApi.HandShake result = new com.impinj.stp.StpApi.HandShake(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.aPIName_ = aPIName_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.aPIVersion_ = aPIVersion_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.HandShake) {
          return mergeFrom((com.impinj.stp.StpApi.HandShake)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.HandShake other) {
        if (other == com.impinj.stp.StpApi.HandShake.getDefaultInstance()) return this;
        if (other.hasAPIName()) {
          bitField0_ |= 0x00000001;
          aPIName_ = other.aPIName_;
          onChanged();
        }
        if (other.hasAPIVersion()) {
          setAPIVersion(other.getAPIVersion());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasAPIName()) {
          
          return false;
        }
        if (!hasAPIVersion()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.HandShake parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.HandShake) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required string API_name = 1;
      private java.lang.Object aPIName_ = "";
      /**
       */
      public boolean hasAPIName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public java.lang.String getAPIName() {
        java.lang.Object ref = aPIName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          aPIName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getAPINameBytes() {
        java.lang.Object ref = aPIName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          aPIName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setAPIName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        aPIName_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearAPIName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        aPIName_ = getDefaultInstance().getAPIName();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setAPINameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        aPIName_ = value;
        onChanged();
        return this;
      }

      // required uint32 API_version = 2;
      private int aPIVersion_ ;
      /**
       */
      public boolean hasAPIVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public int getAPIVersion() {
        return aPIVersion_;
      }
      /**
       */
      public Builder setAPIVersion(int value) {
        bitField0_ |= 0x00000002;
        aPIVersion_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearAPIVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        aPIVersion_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.HandShake)
    }

    static {
      defaultInstance = new HandShake(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.HandShake)
  }

  public interface RegionOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.RegulatoryRegion region_id = 1 [default = REGULATORY_REGION_FCC_PART_15_247];
    /**
     */
    boolean hasRegionId();
    /**
     */
    com.impinj.stp.StpApi.RegulatoryRegion getRegionId();

    // repeated uint32 fixed_frequency_list = 2;
    /**
     */
    java.util.List<java.lang.Integer> getFixedFrequencyListList();
    /**
     */
    int getFixedFrequencyListCount();
    /**
     */
    int getFixedFrequencyList(int index);
  }
  /**
   * Protobuf type {@code Impinj.STP.Region}
   *
   * Details needed to specify all region parameters.
   */
  public static final class Region extends
      com.google.protobuf.GeneratedMessage
      implements RegionOrBuilder {
    // Use Region.newBuilder() to construct.
    private Region(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Region(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Region defaultInstance;
    public static Region getDefaultInstance() {
      return defaultInstance;
    }

    public Region getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Region(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.RegulatoryRegion value = com.impinj.stp.StpApi.RegulatoryRegion.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                regionId_ = value;
              }
              break;
            }
            case 16: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                fixedFrequencyList_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000002;
              }
              fixedFrequencyList_.add(input.readUInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                fixedFrequencyList_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                fixedFrequencyList_.add(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          fixedFrequencyList_ = java.util.Collections.unmodifiableList(fixedFrequencyList_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Region_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Region_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Region.class, com.impinj.stp.StpApi.Region.Builder.class);
    }

    public static com.google.protobuf.Parser<Region> PARSER =
        new com.google.protobuf.AbstractParser<Region>() {
      public Region parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Region(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Region> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.RegulatoryRegion region_id = 1 [default = REGULATORY_REGION_FCC_PART_15_247];
    public static final int REGION_ID_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.RegulatoryRegion regionId_;
    /**
     */
    public boolean hasRegionId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.RegulatoryRegion getRegionId() {
      return regionId_;
    }

    // repeated uint32 fixed_frequency_list = 2;
    public static final int FIXED_FREQUENCY_LIST_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> fixedFrequencyList_;
    /**
     */
    public java.util.List<java.lang.Integer>
        getFixedFrequencyListList() {
      return fixedFrequencyList_;
    }
    /**
     */
    public int getFixedFrequencyListCount() {
      return fixedFrequencyList_.size();
    }
    /**
     */
    public int getFixedFrequencyList(int index) {
      return fixedFrequencyList_.get(index);
    }

    private void initFields() {
      regionId_ = com.impinj.stp.StpApi.RegulatoryRegion.REGULATORY_REGION_FCC_PART_15_247;
      fixedFrequencyList_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasRegionId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, regionId_.getNumber());
      }
      for (int i = 0; i < fixedFrequencyList_.size(); i++) {
        output.writeUInt32(2, fixedFrequencyList_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, regionId_.getNumber());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < fixedFrequencyList_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(fixedFrequencyList_.get(i));
        }
        size += dataSize;
        size += 1 * getFixedFrequencyListList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Region parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Region parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Region parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Region parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Region parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Region parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Region parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Region parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Region parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Region parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Region prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Region}
     *
     * Details needed to specify all region parameters.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.RegionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Region_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Region_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Region.class, com.impinj.stp.StpApi.Region.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Region.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        regionId_ = com.impinj.stp.StpApi.RegulatoryRegion.REGULATORY_REGION_FCC_PART_15_247;
        bitField0_ = (bitField0_ & ~0x00000001);
        fixedFrequencyList_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Region_descriptor;
      }

      public com.impinj.stp.StpApi.Region getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Region.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Region build() {
        com.impinj.stp.StpApi.Region result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Region buildPartial() {
        com.impinj.stp.StpApi.Region result = new com.impinj.stp.StpApi.Region(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.regionId_ = regionId_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          fixedFrequencyList_ = java.util.Collections.unmodifiableList(fixedFrequencyList_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.fixedFrequencyList_ = fixedFrequencyList_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Region) {
          return mergeFrom((com.impinj.stp.StpApi.Region)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Region other) {
        if (other == com.impinj.stp.StpApi.Region.getDefaultInstance()) return this;
        if (other.hasRegionId()) {
          setRegionId(other.getRegionId());
        }
        if (!other.fixedFrequencyList_.isEmpty()) {
          if (fixedFrequencyList_.isEmpty()) {
            fixedFrequencyList_ = other.fixedFrequencyList_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureFixedFrequencyListIsMutable();
            fixedFrequencyList_.addAll(other.fixedFrequencyList_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasRegionId()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Region parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Region) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.RegulatoryRegion region_id = 1 [default = REGULATORY_REGION_FCC_PART_15_247];
      private com.impinj.stp.StpApi.RegulatoryRegion regionId_ = com.impinj.stp.StpApi.RegulatoryRegion.REGULATORY_REGION_FCC_PART_15_247;
      /**
       */
      public boolean hasRegionId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.RegulatoryRegion getRegionId() {
        return regionId_;
      }
      /**
       */
      public Builder setRegionId(com.impinj.stp.StpApi.RegulatoryRegion value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        regionId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearRegionId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        regionId_ = com.impinj.stp.StpApi.RegulatoryRegion.REGULATORY_REGION_FCC_PART_15_247;
        onChanged();
        return this;
      }

      // repeated uint32 fixed_frequency_list = 2;
      private java.util.List<java.lang.Integer> fixedFrequencyList_ = java.util.Collections.emptyList();
      private void ensureFixedFrequencyListIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          fixedFrequencyList_ = new java.util.ArrayList<java.lang.Integer>(fixedFrequencyList_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       */
      public java.util.List<java.lang.Integer>
          getFixedFrequencyListList() {
        return java.util.Collections.unmodifiableList(fixedFrequencyList_);
      }
      /**
       */
      public int getFixedFrequencyListCount() {
        return fixedFrequencyList_.size();
      }
      /**
       */
      public int getFixedFrequencyList(int index) {
        return fixedFrequencyList_.get(index);
      }
      /**
       */
      public Builder setFixedFrequencyList(
          int index, int value) {
        ensureFixedFrequencyListIsMutable();
        fixedFrequencyList_.set(index, value);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addFixedFrequencyList(int value) {
        ensureFixedFrequencyListIsMutable();
        fixedFrequencyList_.add(value);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addAllFixedFrequencyList(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureFixedFrequencyListIsMutable();
        super.addAll(values, fixedFrequencyList_);
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearFixedFrequencyList() {
        fixedFrequencyList_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Region)
    }

    static {
      defaultInstance = new Region(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Region)
  }

  public interface TimestampOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint64 useconds_since_epoch = 1;
    /**
     *
     * Microseconds since Jan. 1 1970.
     */
    boolean hasUsecondsSinceEpoch();
    /**
     *
     * Microseconds since Jan. 1 1970.
     */
    long getUsecondsSinceEpoch();
  }
  /**
   * Protobuf type {@code Impinj.STP.Timestamp}
   *
   * The time that an event happened on the device.  Used in
   * reports so a client application knows when tag operations
   * occur.
   */
  public static final class Timestamp extends
      com.google.protobuf.GeneratedMessage
      implements TimestampOrBuilder {
    // Use Timestamp.newBuilder() to construct.
    private Timestamp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Timestamp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Timestamp defaultInstance;
    public static Timestamp getDefaultInstance() {
      return defaultInstance;
    }

    public Timestamp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Timestamp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              usecondsSinceEpoch_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Timestamp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Timestamp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Timestamp.class, com.impinj.stp.StpApi.Timestamp.Builder.class);
    }

    public static com.google.protobuf.Parser<Timestamp> PARSER =
        new com.google.protobuf.AbstractParser<Timestamp>() {
      public Timestamp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Timestamp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Timestamp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional uint64 useconds_since_epoch = 1;
    public static final int USECONDS_SINCE_EPOCH_FIELD_NUMBER = 1;
    private long usecondsSinceEpoch_;
    /**
     *
     * Microseconds since Jan. 1 1970.
     */
    public boolean hasUsecondsSinceEpoch() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Microseconds since Jan. 1 1970.
     */
    public long getUsecondsSinceEpoch() {
      return usecondsSinceEpoch_;
    }

    private void initFields() {
      usecondsSinceEpoch_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt64(1, usecondsSinceEpoch_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, usecondsSinceEpoch_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Timestamp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Timestamp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Timestamp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Timestamp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Timestamp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Timestamp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Timestamp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Timestamp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Timestamp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Timestamp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Timestamp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Timestamp}
     *
     * The time that an event happened on the device.  Used in
     * reports so a client application knows when tag operations
     * occur.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TimestampOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Timestamp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Timestamp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Timestamp.class, com.impinj.stp.StpApi.Timestamp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Timestamp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        usecondsSinceEpoch_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Timestamp_descriptor;
      }

      public com.impinj.stp.StpApi.Timestamp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Timestamp build() {
        com.impinj.stp.StpApi.Timestamp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Timestamp buildPartial() {
        com.impinj.stp.StpApi.Timestamp result = new com.impinj.stp.StpApi.Timestamp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.usecondsSinceEpoch_ = usecondsSinceEpoch_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Timestamp) {
          return mergeFrom((com.impinj.stp.StpApi.Timestamp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Timestamp other) {
        if (other == com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) return this;
        if (other.hasUsecondsSinceEpoch()) {
          setUsecondsSinceEpoch(other.getUsecondsSinceEpoch());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Timestamp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Timestamp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint64 useconds_since_epoch = 1;
      private long usecondsSinceEpoch_ ;
      /**
       *
       * Microseconds since Jan. 1 1970.
       */
      public boolean hasUsecondsSinceEpoch() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Microseconds since Jan. 1 1970.
       */
      public long getUsecondsSinceEpoch() {
        return usecondsSinceEpoch_;
      }
      /**
       *
       * Microseconds since Jan. 1 1970.
       */
      public Builder setUsecondsSinceEpoch(long value) {
        bitField0_ |= 0x00000001;
        usecondsSinceEpoch_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Microseconds since Jan. 1 1970.
       */
      public Builder clearUsecondsSinceEpoch() {
        bitField0_ = (bitField0_ & ~0x00000001);
        usecondsSinceEpoch_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Timestamp)
    }

    static {
      defaultInstance = new Timestamp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Timestamp)
  }

  public interface ConnectCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.HandShake hand_shake = 1;
    /**
     */
    boolean hasHandShake();
    /**
     */
    com.impinj.stp.StpApi.HandShake getHandShake();
    /**
     */
    com.impinj.stp.StpApi.HandShakeOrBuilder getHandShakeOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.ConnectCommand}
   *
   * Sent on the initial device connection to verify the health
   * of the channel.
   */
  public static final class ConnectCommand extends
      com.google.protobuf.GeneratedMessage
      implements ConnectCommandOrBuilder {
    // Use ConnectCommand.newBuilder() to construct.
    private ConnectCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ConnectCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ConnectCommand defaultInstance;
    public static ConnectCommand getDefaultInstance() {
      return defaultInstance;
    }

    public ConnectCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ConnectCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.HandShake.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = handShake_.toBuilder();
              }
              handShake_ = input.readMessage(com.impinj.stp.StpApi.HandShake.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(handShake_);
                handShake_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.ConnectCommand.class, com.impinj.stp.StpApi.ConnectCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<ConnectCommand> PARSER =
        new com.google.protobuf.AbstractParser<ConnectCommand>() {
      public ConnectCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConnectCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ConnectCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.HandShake hand_shake = 1;
    public static final int HAND_SHAKE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.HandShake handShake_;
    /**
     */
    public boolean hasHandShake() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.HandShake getHandShake() {
      return handShake_;
    }
    /**
     */
    public com.impinj.stp.StpApi.HandShakeOrBuilder getHandShakeOrBuilder() {
      return handShake_;
    }

    private void initFields() {
      handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasHandShake()) {
        if (!getHandShake().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, handShake_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, handShake_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.ConnectCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.ConnectCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.ConnectCommand}
     *
     * Sent on the initial device connection to verify the health
     * of the channel.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.ConnectCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.ConnectCommand.class, com.impinj.stp.StpApi.ConnectCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.ConnectCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getHandShakeFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (handShakeBuilder_ == null) {
          handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
        } else {
          handShakeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectCommand_descriptor;
      }

      public com.impinj.stp.StpApi.ConnectCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.ConnectCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.ConnectCommand build() {
        com.impinj.stp.StpApi.ConnectCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.ConnectCommand buildPartial() {
        com.impinj.stp.StpApi.ConnectCommand result = new com.impinj.stp.StpApi.ConnectCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (handShakeBuilder_ == null) {
          result.handShake_ = handShake_;
        } else {
          result.handShake_ = handShakeBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.ConnectCommand) {
          return mergeFrom((com.impinj.stp.StpApi.ConnectCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.ConnectCommand other) {
        if (other == com.impinj.stp.StpApi.ConnectCommand.getDefaultInstance()) return this;
        if (other.hasHandShake()) {
          mergeHandShake(other.getHandShake());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasHandShake()) {
          if (!getHandShake().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.ConnectCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.ConnectCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.HandShake hand_shake = 1;
      private com.impinj.stp.StpApi.HandShake handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.HandShake, com.impinj.stp.StpApi.HandShake.Builder, com.impinj.stp.StpApi.HandShakeOrBuilder> handShakeBuilder_;
      /**
       */
      public boolean hasHandShake() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.HandShake getHandShake() {
        if (handShakeBuilder_ == null) {
          return handShake_;
        } else {
          return handShakeBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setHandShake(com.impinj.stp.StpApi.HandShake value) {
        if (handShakeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          handShake_ = value;
          onChanged();
        } else {
          handShakeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setHandShake(
          com.impinj.stp.StpApi.HandShake.Builder builderForValue) {
        if (handShakeBuilder_ == null) {
          handShake_ = builderForValue.build();
          onChanged();
        } else {
          handShakeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeHandShake(com.impinj.stp.StpApi.HandShake value) {
        if (handShakeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              handShake_ != com.impinj.stp.StpApi.HandShake.getDefaultInstance()) {
            handShake_ =
              com.impinj.stp.StpApi.HandShake.newBuilder(handShake_).mergeFrom(value).buildPartial();
          } else {
            handShake_ = value;
          }
          onChanged();
        } else {
          handShakeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearHandShake() {
        if (handShakeBuilder_ == null) {
          handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
          onChanged();
        } else {
          handShakeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.HandShake.Builder getHandShakeBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getHandShakeFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.HandShakeOrBuilder getHandShakeOrBuilder() {
        if (handShakeBuilder_ != null) {
          return handShakeBuilder_.getMessageOrBuilder();
        } else {
          return handShake_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.HandShake, com.impinj.stp.StpApi.HandShake.Builder, com.impinj.stp.StpApi.HandShakeOrBuilder> 
          getHandShakeFieldBuilder() {
        if (handShakeBuilder_ == null) {
          handShakeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.HandShake, com.impinj.stp.StpApi.HandShake.Builder, com.impinj.stp.StpApi.HandShakeOrBuilder>(
                  handShake_,
                  getParentForChildren(),
                  isClean());
          handShake_ = null;
        }
        return handShakeBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.ConnectCommand)
    }

    static {
      defaultInstance = new ConnectCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.ConnectCommand)
  }

  public interface GetDeviceStateCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetDeviceStateCommand}
   *
   * Request the health of the device. See GetDeviceStateResp_
   */
  public static final class GetDeviceStateCommand extends
      com.google.protobuf.GeneratedMessage
      implements GetDeviceStateCommandOrBuilder {
    // Use GetDeviceStateCommand.newBuilder() to construct.
    private GetDeviceStateCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetDeviceStateCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetDeviceStateCommand defaultInstance;
    public static GetDeviceStateCommand getDefaultInstance() {
      return defaultInstance;
    }

    public GetDeviceStateCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetDeviceStateCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetDeviceStateCommand.class, com.impinj.stp.StpApi.GetDeviceStateCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<GetDeviceStateCommand> PARSER =
        new com.google.protobuf.AbstractParser<GetDeviceStateCommand>() {
      public GetDeviceStateCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetDeviceStateCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetDeviceStateCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetDeviceStateCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetDeviceStateCommand}
     *
     * Request the health of the device. See GetDeviceStateResp_
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetDeviceStateCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetDeviceStateCommand.class, com.impinj.stp.StpApi.GetDeviceStateCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetDeviceStateCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateCommand_descriptor;
      }

      public com.impinj.stp.StpApi.GetDeviceStateCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetDeviceStateCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetDeviceStateCommand build() {
        com.impinj.stp.StpApi.GetDeviceStateCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetDeviceStateCommand buildPartial() {
        com.impinj.stp.StpApi.GetDeviceStateCommand result = new com.impinj.stp.StpApi.GetDeviceStateCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetDeviceStateCommand) {
          return mergeFrom((com.impinj.stp.StpApi.GetDeviceStateCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetDeviceStateCommand other) {
        if (other == com.impinj.stp.StpApi.GetDeviceStateCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetDeviceStateCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetDeviceStateCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetDeviceStateCommand)
    }

    static {
      defaultInstance = new GetDeviceStateCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetDeviceStateCommand)
  }

  public interface GetVersionsReaderCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetVersionsReaderCommand}
   *
   * Get versions of device firmware, API.  See
   * GetVersionsReaderResp_
   */
  public static final class GetVersionsReaderCommand extends
      com.google.protobuf.GeneratedMessage
      implements GetVersionsReaderCommandOrBuilder {
    // Use GetVersionsReaderCommand.newBuilder() to construct.
    private GetVersionsReaderCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetVersionsReaderCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetVersionsReaderCommand defaultInstance;
    public static GetVersionsReaderCommand getDefaultInstance() {
      return defaultInstance;
    }

    public GetVersionsReaderCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetVersionsReaderCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetVersionsReaderCommand.class, com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<GetVersionsReaderCommand> PARSER =
        new com.google.protobuf.AbstractParser<GetVersionsReaderCommand>() {
      public GetVersionsReaderCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetVersionsReaderCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetVersionsReaderCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetVersionsReaderCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetVersionsReaderCommand}
     *
     * Get versions of device firmware, API.  See
     * GetVersionsReaderResp_
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetVersionsReaderCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetVersionsReaderCommand.class, com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetVersionsReaderCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderCommand_descriptor;
      }

      public com.impinj.stp.StpApi.GetVersionsReaderCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetVersionsReaderCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetVersionsReaderCommand build() {
        com.impinj.stp.StpApi.GetVersionsReaderCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetVersionsReaderCommand buildPartial() {
        com.impinj.stp.StpApi.GetVersionsReaderCommand result = new com.impinj.stp.StpApi.GetVersionsReaderCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetVersionsReaderCommand) {
          return mergeFrom((com.impinj.stp.StpApi.GetVersionsReaderCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetVersionsReaderCommand other) {
        if (other == com.impinj.stp.StpApi.GetVersionsReaderCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetVersionsReaderCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetVersionsReaderCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetVersionsReaderCommand)
    }

    static {
      defaultInstance = new GetVersionsReaderCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetVersionsReaderCommand)
  }

  public interface StopCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.StopCommand}
   *
   * Stop the current device encode or inventory operation.
   */
  public static final class StopCommand extends
      com.google.protobuf.GeneratedMessage
      implements StopCommandOrBuilder {
    // Use StopCommand.newBuilder() to construct.
    private StopCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StopCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StopCommand defaultInstance;
    public static StopCommand getDefaultInstance() {
      return defaultInstance;
    }

    public StopCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StopCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.StopCommand.class, com.impinj.stp.StpApi.StopCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<StopCommand> PARSER =
        new com.google.protobuf.AbstractParser<StopCommand>() {
      public StopCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StopCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StopCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.StopCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StopCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StopCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StopCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.StopCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StopCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.StopCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.StopCommand}
     *
     * Stop the current device encode or inventory operation.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.StopCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.StopCommand.class, com.impinj.stp.StpApi.StopCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.StopCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopCommand_descriptor;
      }

      public com.impinj.stp.StpApi.StopCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.StopCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.StopCommand build() {
        com.impinj.stp.StpApi.StopCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.StopCommand buildPartial() {
        com.impinj.stp.StpApi.StopCommand result = new com.impinj.stp.StpApi.StopCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.StopCommand) {
          return mergeFrom((com.impinj.stp.StpApi.StopCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.StopCommand other) {
        if (other == com.impinj.stp.StpApi.StopCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.StopCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.StopCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.StopCommand)
    }

    static {
      defaultInstance = new StopCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.StopCommand)
  }

  public interface ConnectRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();

    // optional .Impinj.STP.HandShake hand_shake = 2;
    /**
     */
    boolean hasHandShake();
    /**
     */
    com.impinj.stp.StpApi.HandShake getHandShake();
    /**
     */
    com.impinj.stp.StpApi.HandShakeOrBuilder getHandShakeOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.ConnectResp}
   *
   * Indicates that the connection was successful. See
   * ConnectCommand_.
   */
  public static final class ConnectResp extends
      com.google.protobuf.GeneratedMessage
      implements ConnectRespOrBuilder {
    // Use ConnectResp.newBuilder() to construct.
    private ConnectResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ConnectResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ConnectResp defaultInstance;
    public static ConnectResp getDefaultInstance() {
      return defaultInstance;
    }

    public ConnectResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ConnectResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.HandShake.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = handShake_.toBuilder();
              }
              handShake_ = input.readMessage(com.impinj.stp.StpApi.HandShake.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(handShake_);
                handShake_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.ConnectResp.class, com.impinj.stp.StpApi.ConnectResp.Builder.class);
    }

    public static com.google.protobuf.Parser<ConnectResp> PARSER =
        new com.google.protobuf.AbstractParser<ConnectResp>() {
      public ConnectResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ConnectResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ConnectResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    // optional .Impinj.STP.HandShake hand_shake = 2;
    public static final int HAND_SHAKE_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.HandShake handShake_;
    /**
     */
    public boolean hasHandShake() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.HandShake getHandShake() {
      return handShake_;
    }
    /**
     */
    public com.impinj.stp.StpApi.HandShakeOrBuilder getHandShakeOrBuilder() {
      return handShake_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasHandShake()) {
        if (!getHandShake().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, handShake_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, handShake_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.ConnectResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.ConnectResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.ConnectResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.ConnectResp}
     *
     * Indicates that the connection was successful. See
     * ConnectCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.ConnectRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.ConnectResp.class, com.impinj.stp.StpApi.ConnectResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.ConnectResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
          getHandShakeFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (handShakeBuilder_ == null) {
          handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
        } else {
          handShakeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ConnectResp_descriptor;
      }

      public com.impinj.stp.StpApi.ConnectResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.ConnectResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.ConnectResp build() {
        com.impinj.stp.StpApi.ConnectResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.ConnectResp buildPartial() {
        com.impinj.stp.StpApi.ConnectResp result = new com.impinj.stp.StpApi.ConnectResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (handShakeBuilder_ == null) {
          result.handShake_ = handShake_;
        } else {
          result.handShake_ = handShakeBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.ConnectResp) {
          return mergeFrom((com.impinj.stp.StpApi.ConnectResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.ConnectResp other) {
        if (other == com.impinj.stp.StpApi.ConnectResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        if (other.hasHandShake()) {
          mergeHandShake(other.getHandShake());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        if (hasHandShake()) {
          if (!getHandShake().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.ConnectResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.ConnectResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // optional .Impinj.STP.HandShake hand_shake = 2;
      private com.impinj.stp.StpApi.HandShake handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.HandShake, com.impinj.stp.StpApi.HandShake.Builder, com.impinj.stp.StpApi.HandShakeOrBuilder> handShakeBuilder_;
      /**
       */
      public boolean hasHandShake() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.HandShake getHandShake() {
        if (handShakeBuilder_ == null) {
          return handShake_;
        } else {
          return handShakeBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setHandShake(com.impinj.stp.StpApi.HandShake value) {
        if (handShakeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          handShake_ = value;
          onChanged();
        } else {
          handShakeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setHandShake(
          com.impinj.stp.StpApi.HandShake.Builder builderForValue) {
        if (handShakeBuilder_ == null) {
          handShake_ = builderForValue.build();
          onChanged();
        } else {
          handShakeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeHandShake(com.impinj.stp.StpApi.HandShake value) {
        if (handShakeBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              handShake_ != com.impinj.stp.StpApi.HandShake.getDefaultInstance()) {
            handShake_ =
              com.impinj.stp.StpApi.HandShake.newBuilder(handShake_).mergeFrom(value).buildPartial();
          } else {
            handShake_ = value;
          }
          onChanged();
        } else {
          handShakeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearHandShake() {
        if (handShakeBuilder_ == null) {
          handShake_ = com.impinj.stp.StpApi.HandShake.getDefaultInstance();
          onChanged();
        } else {
          handShakeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.HandShake.Builder getHandShakeBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getHandShakeFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.HandShakeOrBuilder getHandShakeOrBuilder() {
        if (handShakeBuilder_ != null) {
          return handShakeBuilder_.getMessageOrBuilder();
        } else {
          return handShake_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.HandShake, com.impinj.stp.StpApi.HandShake.Builder, com.impinj.stp.StpApi.HandShakeOrBuilder> 
          getHandShakeFieldBuilder() {
        if (handShakeBuilder_ == null) {
          handShakeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.HandShake, com.impinj.stp.StpApi.HandShake.Builder, com.impinj.stp.StpApi.HandShakeOrBuilder>(
                  handShake_,
                  getParentForChildren(),
                  isClean());
          handShake_ = null;
        }
        return handShakeBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.ConnectResp)
    }

    static {
      defaultInstance = new ConnectResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.ConnectResp)
  }

  public interface GetDeviceStateRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();

    // optional .Impinj.STP.DeviceState device_state = 2;
    /**
     */
    boolean hasDeviceState();
    /**
     */
    com.impinj.stp.StpApi.DeviceState getDeviceState();
    /**
     */
    com.impinj.stp.StpApi.DeviceStateOrBuilder getDeviceStateOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetDeviceStateResp}
   *
   * The health of the device.  See GetDeviceStateCommand_.
   */
  public static final class GetDeviceStateResp extends
      com.google.protobuf.GeneratedMessage
      implements GetDeviceStateRespOrBuilder {
    // Use GetDeviceStateResp.newBuilder() to construct.
    private GetDeviceStateResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetDeviceStateResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetDeviceStateResp defaultInstance;
    public static GetDeviceStateResp getDefaultInstance() {
      return defaultInstance;
    }

    public GetDeviceStateResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetDeviceStateResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.DeviceState.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = deviceState_.toBuilder();
              }
              deviceState_ = input.readMessage(com.impinj.stp.StpApi.DeviceState.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceState_);
                deviceState_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetDeviceStateResp.class, com.impinj.stp.StpApi.GetDeviceStateResp.Builder.class);
    }

    public static com.google.protobuf.Parser<GetDeviceStateResp> PARSER =
        new com.google.protobuf.AbstractParser<GetDeviceStateResp>() {
      public GetDeviceStateResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetDeviceStateResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetDeviceStateResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    // optional .Impinj.STP.DeviceState device_state = 2;
    public static final int DEVICE_STATE_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.DeviceState deviceState_;
    /**
     */
    public boolean hasDeviceState() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceState getDeviceState() {
      return deviceState_;
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceStateOrBuilder getDeviceStateOrBuilder() {
      return deviceState_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      deviceState_ = com.impinj.stp.StpApi.DeviceState.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, deviceState_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, deviceState_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceStateResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetDeviceStateResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetDeviceStateResp}
     *
     * The health of the device.  See GetDeviceStateCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetDeviceStateRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetDeviceStateResp.class, com.impinj.stp.StpApi.GetDeviceStateResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetDeviceStateResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
          getDeviceStateFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (deviceStateBuilder_ == null) {
          deviceState_ = com.impinj.stp.StpApi.DeviceState.getDefaultInstance();
        } else {
          deviceStateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceStateResp_descriptor;
      }

      public com.impinj.stp.StpApi.GetDeviceStateResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetDeviceStateResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetDeviceStateResp build() {
        com.impinj.stp.StpApi.GetDeviceStateResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetDeviceStateResp buildPartial() {
        com.impinj.stp.StpApi.GetDeviceStateResp result = new com.impinj.stp.StpApi.GetDeviceStateResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (deviceStateBuilder_ == null) {
          result.deviceState_ = deviceState_;
        } else {
          result.deviceState_ = deviceStateBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetDeviceStateResp) {
          return mergeFrom((com.impinj.stp.StpApi.GetDeviceStateResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetDeviceStateResp other) {
        if (other == com.impinj.stp.StpApi.GetDeviceStateResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        if (other.hasDeviceState()) {
          mergeDeviceState(other.getDeviceState());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetDeviceStateResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetDeviceStateResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // optional .Impinj.STP.DeviceState device_state = 2;
      private com.impinj.stp.StpApi.DeviceState deviceState_ = com.impinj.stp.StpApi.DeviceState.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceState, com.impinj.stp.StpApi.DeviceState.Builder, com.impinj.stp.StpApi.DeviceStateOrBuilder> deviceStateBuilder_;
      /**
       */
      public boolean hasDeviceState() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceState getDeviceState() {
        if (deviceStateBuilder_ == null) {
          return deviceState_;
        } else {
          return deviceStateBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setDeviceState(com.impinj.stp.StpApi.DeviceState value) {
        if (deviceStateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceState_ = value;
          onChanged();
        } else {
          deviceStateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setDeviceState(
          com.impinj.stp.StpApi.DeviceState.Builder builderForValue) {
        if (deviceStateBuilder_ == null) {
          deviceState_ = builderForValue.build();
          onChanged();
        } else {
          deviceStateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeDeviceState(com.impinj.stp.StpApi.DeviceState value) {
        if (deviceStateBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              deviceState_ != com.impinj.stp.StpApi.DeviceState.getDefaultInstance()) {
            deviceState_ =
              com.impinj.stp.StpApi.DeviceState.newBuilder(deviceState_).mergeFrom(value).buildPartial();
          } else {
            deviceState_ = value;
          }
          onChanged();
        } else {
          deviceStateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearDeviceState() {
        if (deviceStateBuilder_ == null) {
          deviceState_ = com.impinj.stp.StpApi.DeviceState.getDefaultInstance();
          onChanged();
        } else {
          deviceStateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceState.Builder getDeviceStateBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDeviceStateFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceStateOrBuilder getDeviceStateOrBuilder() {
        if (deviceStateBuilder_ != null) {
          return deviceStateBuilder_.getMessageOrBuilder();
        } else {
          return deviceState_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceState, com.impinj.stp.StpApi.DeviceState.Builder, com.impinj.stp.StpApi.DeviceStateOrBuilder> 
          getDeviceStateFieldBuilder() {
        if (deviceStateBuilder_ == null) {
          deviceStateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DeviceState, com.impinj.stp.StpApi.DeviceState.Builder, com.impinj.stp.StpApi.DeviceStateOrBuilder>(
                  deviceState_,
                  getParentForChildren(),
                  isClean());
          deviceState_ = null;
        }
        return deviceStateBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetDeviceStateResp)
    }

    static {
      defaultInstance = new GetDeviceStateResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetDeviceStateResp)
  }

  public interface GetVersionsReaderRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();

    // optional .Impinj.STP.Versions versions = 2;
    /**
     *
     * A list of remote device API and firmware versions.
     */
    boolean hasVersions();
    /**
     *
     * A list of remote device API and firmware versions.
     */
    com.impinj.stp.StpApi.Versions getVersions();
    /**
     *
     * A list of remote device API and firmware versions.
     */
    com.impinj.stp.StpApi.VersionsOrBuilder getVersionsOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetVersionsReaderResp}
   *
   * The device firmware and API versions. See
   * GetVersionsReaderCommand_.
   */
  public static final class GetVersionsReaderResp extends
      com.google.protobuf.GeneratedMessage
      implements GetVersionsReaderRespOrBuilder {
    // Use GetVersionsReaderResp.newBuilder() to construct.
    private GetVersionsReaderResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetVersionsReaderResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetVersionsReaderResp defaultInstance;
    public static GetVersionsReaderResp getDefaultInstance() {
      return defaultInstance;
    }

    public GetVersionsReaderResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetVersionsReaderResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.Versions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = versions_.toBuilder();
              }
              versions_ = input.readMessage(com.impinj.stp.StpApi.Versions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(versions_);
                versions_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetVersionsReaderResp.class, com.impinj.stp.StpApi.GetVersionsReaderResp.Builder.class);
    }

    public static com.google.protobuf.Parser<GetVersionsReaderResp> PARSER =
        new com.google.protobuf.AbstractParser<GetVersionsReaderResp>() {
      public GetVersionsReaderResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetVersionsReaderResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetVersionsReaderResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    // optional .Impinj.STP.Versions versions = 2;
    public static final int VERSIONS_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.Versions versions_;
    /**
     *
     * A list of remote device API and firmware versions.
     */
    public boolean hasVersions() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * A list of remote device API and firmware versions.
     */
    public com.impinj.stp.StpApi.Versions getVersions() {
      return versions_;
    }
    /**
     *
     * A list of remote device API and firmware versions.
     */
    public com.impinj.stp.StpApi.VersionsOrBuilder getVersionsOrBuilder() {
      return versions_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      versions_ = com.impinj.stp.StpApi.Versions.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasVersions()) {
        if (!getVersions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, versions_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, versions_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetVersionsReaderResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetVersionsReaderResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetVersionsReaderResp}
     *
     * The device firmware and API versions. See
     * GetVersionsReaderCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetVersionsReaderRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetVersionsReaderResp.class, com.impinj.stp.StpApi.GetVersionsReaderResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetVersionsReaderResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
          getVersionsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (versionsBuilder_ == null) {
          versions_ = com.impinj.stp.StpApi.Versions.getDefaultInstance();
        } else {
          versionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetVersionsReaderResp_descriptor;
      }

      public com.impinj.stp.StpApi.GetVersionsReaderResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetVersionsReaderResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetVersionsReaderResp build() {
        com.impinj.stp.StpApi.GetVersionsReaderResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetVersionsReaderResp buildPartial() {
        com.impinj.stp.StpApi.GetVersionsReaderResp result = new com.impinj.stp.StpApi.GetVersionsReaderResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (versionsBuilder_ == null) {
          result.versions_ = versions_;
        } else {
          result.versions_ = versionsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetVersionsReaderResp) {
          return mergeFrom((com.impinj.stp.StpApi.GetVersionsReaderResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetVersionsReaderResp other) {
        if (other == com.impinj.stp.StpApi.GetVersionsReaderResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        if (other.hasVersions()) {
          mergeVersions(other.getVersions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        if (hasVersions()) {
          if (!getVersions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetVersionsReaderResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetVersionsReaderResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // optional .Impinj.STP.Versions versions = 2;
      private com.impinj.stp.StpApi.Versions versions_ = com.impinj.stp.StpApi.Versions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Versions, com.impinj.stp.StpApi.Versions.Builder, com.impinj.stp.StpApi.VersionsOrBuilder> versionsBuilder_;
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public boolean hasVersions() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public com.impinj.stp.StpApi.Versions getVersions() {
        if (versionsBuilder_ == null) {
          return versions_;
        } else {
          return versionsBuilder_.getMessage();
        }
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public Builder setVersions(com.impinj.stp.StpApi.Versions value) {
        if (versionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          versions_ = value;
          onChanged();
        } else {
          versionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public Builder setVersions(
          com.impinj.stp.StpApi.Versions.Builder builderForValue) {
        if (versionsBuilder_ == null) {
          versions_ = builderForValue.build();
          onChanged();
        } else {
          versionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public Builder mergeVersions(com.impinj.stp.StpApi.Versions value) {
        if (versionsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              versions_ != com.impinj.stp.StpApi.Versions.getDefaultInstance()) {
            versions_ =
              com.impinj.stp.StpApi.Versions.newBuilder(versions_).mergeFrom(value).buildPartial();
          } else {
            versions_ = value;
          }
          onChanged();
        } else {
          versionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public Builder clearVersions() {
        if (versionsBuilder_ == null) {
          versions_ = com.impinj.stp.StpApi.Versions.getDefaultInstance();
          onChanged();
        } else {
          versionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public com.impinj.stp.StpApi.Versions.Builder getVersionsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getVersionsFieldBuilder().getBuilder();
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      public com.impinj.stp.StpApi.VersionsOrBuilder getVersionsOrBuilder() {
        if (versionsBuilder_ != null) {
          return versionsBuilder_.getMessageOrBuilder();
        } else {
          return versions_;
        }
      }
      /**
       *
       * A list of remote device API and firmware versions.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Versions, com.impinj.stp.StpApi.Versions.Builder, com.impinj.stp.StpApi.VersionsOrBuilder> 
          getVersionsFieldBuilder() {
        if (versionsBuilder_ == null) {
          versionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Versions, com.impinj.stp.StpApi.Versions.Builder, com.impinj.stp.StpApi.VersionsOrBuilder>(
                  versions_,
                  getParentForChildren(),
                  isClean());
          versions_ = null;
        }
        return versionsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetVersionsReaderResp)
    }

    static {
      defaultInstance = new GetVersionsReaderResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetVersionsReaderResp)
  }

  public interface InvalidRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.InvalidResp}
   *
   * The command sent to the device was not recognized as valid.
   */
  public static final class InvalidResp extends
      com.google.protobuf.GeneratedMessage
      implements InvalidRespOrBuilder {
    // Use InvalidResp.newBuilder() to construct.
    private InvalidResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InvalidResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final InvalidResp defaultInstance;
    public static InvalidResp getDefaultInstance() {
      return defaultInstance;
    }

    public InvalidResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InvalidResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_InvalidResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_InvalidResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.InvalidResp.class, com.impinj.stp.StpApi.InvalidResp.Builder.class);
    }

    public static com.google.protobuf.Parser<InvalidResp> PARSER =
        new com.google.protobuf.AbstractParser<InvalidResp>() {
      public InvalidResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InvalidResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<InvalidResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.InvalidResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.InvalidResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.InvalidResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.InvalidResp}
     *
     * The command sent to the device was not recognized as valid.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.InvalidRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InvalidResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InvalidResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.InvalidResp.class, com.impinj.stp.StpApi.InvalidResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.InvalidResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InvalidResp_descriptor;
      }

      public com.impinj.stp.StpApi.InvalidResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.InvalidResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.InvalidResp build() {
        com.impinj.stp.StpApi.InvalidResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.InvalidResp buildPartial() {
        com.impinj.stp.StpApi.InvalidResp result = new com.impinj.stp.StpApi.InvalidResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.InvalidResp) {
          return mergeFrom((com.impinj.stp.StpApi.InvalidResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.InvalidResp other) {
        if (other == com.impinj.stp.StpApi.InvalidResp.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.InvalidResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.InvalidResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.InvalidResp)
    }

    static {
      defaultInstance = new InvalidResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.InvalidResp)
  }

  public interface StopRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.StopResp}
   *
   * See StopCommand_.
   */
  public static final class StopResp extends
      com.google.protobuf.GeneratedMessage
      implements StopRespOrBuilder {
    // Use StopResp.newBuilder() to construct.
    private StopResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StopResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StopResp defaultInstance;
    public static StopResp getDefaultInstance() {
      return defaultInstance;
    }

    public StopResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StopResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.StopResp.class, com.impinj.stp.StpApi.StopResp.Builder.class);
    }

    public static com.google.protobuf.Parser<StopResp> PARSER =
        new com.google.protobuf.AbstractParser<StopResp>() {
      public StopResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StopResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StopResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.StopResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StopResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StopResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StopResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.StopResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StopResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.StopResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.StopResp}
     *
     * See StopCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.StopRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.StopResp.class, com.impinj.stp.StpApi.StopResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.StopResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopResp_descriptor;
      }

      public com.impinj.stp.StpApi.StopResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.StopResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.StopResp build() {
        com.impinj.stp.StpApi.StopResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.StopResp buildPartial() {
        com.impinj.stp.StpApi.StopResp result = new com.impinj.stp.StpApi.StopResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.StopResp) {
          return mergeFrom((com.impinj.stp.StpApi.StopResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.StopResp other) {
        if (other == com.impinj.stp.StpApi.StopResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.StopResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.StopResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.StopResp)
    }

    static {
      defaultInstance = new StopResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.StopResp)
  }

  public interface DeviceConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Region region = 2;
    /**
     *
     * repeated    LicenseKey
     * installed_license_keys              = 1;
     */
    boolean hasRegion();
    /**
     *
     * repeated    LicenseKey
     * installed_license_keys              = 1;
     */
    com.impinj.stp.StpApi.Region getRegion();
    /**
     *
     * repeated    LicenseKey
     * installed_license_keys              = 1;
     */
    com.impinj.stp.StpApi.RegionOrBuilder getRegionOrBuilder();

    // required .Impinj.STP.DeviceMode device_mode = 3 [default = DEVICE_MODE_INVENTORY];
    /**
     */
    boolean hasDeviceMode();
    /**
     */
    com.impinj.stp.StpApi.DeviceMode getDeviceMode();

    // required .Impinj.STP.OperationMode operation_mode = 4 [default = OPERATION_MODE_CONTINUOUS];
    /**
     */
    boolean hasOperationMode();
    /**
     */
    com.impinj.stp.StpApi.OperationMode getOperationMode();

    // optional .Impinj.STP.OperationResponsibility operation_responsibility = 5;
    /**
     */
    boolean hasOperationResponsibility();
    /**
     */
    com.impinj.stp.StpApi.OperationResponsibility getOperationResponsibility();
    /**
     */
    com.impinj.stp.StpApi.OperationResponsibilityOrBuilder getOperationResponsibilityOrBuilder();

    // optional .Impinj.STP.TriggerConfig trigger_config = 6;
    /**
     */
    boolean hasTriggerConfig();
    /**
     */
    com.impinj.stp.StpApi.TriggerConfig getTriggerConfig();
    /**
     */
    com.impinj.stp.StpApi.TriggerConfigOrBuilder getTriggerConfigOrBuilder();

    // optional .Impinj.STP.GPIConfig GPI_config = 7;
    /**
     */
    boolean hasGPIConfig();
    /**
     */
    com.impinj.stp.StpApi.GPIConfig getGPIConfig();
    /**
     */
    com.impinj.stp.StpApi.GPIConfigOrBuilder getGPIConfigOrBuilder();

    // optional .Impinj.STP.GPOConfig GPO_config = 8;
    /**
     */
    boolean hasGPOConfig();
    /**
     */
    com.impinj.stp.StpApi.GPOConfig getGPOConfig();
    /**
     */
    com.impinj.stp.StpApi.GPOConfigOrBuilder getGPOConfigOrBuilder();

    // optional .Impinj.STP.ReportConfig report_config = 9;
    /**
     */
    boolean hasReportConfig();
    /**
     */
    com.impinj.stp.StpApi.ReportConfig getReportConfig();
    /**
     */
    com.impinj.stp.StpApi.ReportConfigOrBuilder getReportConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.DeviceConfig}
   *
   * Defines the behavior of the device. See
   * SetDeviceConfigResp_.
   */
  public static final class DeviceConfig extends
      com.google.protobuf.GeneratedMessage
      implements DeviceConfigOrBuilder {
    // Use DeviceConfig.newBuilder() to construct.
    private DeviceConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeviceConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DeviceConfig defaultInstance;
    public static DeviceConfig getDefaultInstance() {
      return defaultInstance;
    }

    public DeviceConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.Region.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = region_.toBuilder();
              }
              region_ = input.readMessage(com.impinj.stp.StpApi.Region.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(region_);
                region_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.DeviceMode value = com.impinj.stp.StpApi.DeviceMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                deviceMode_ = value;
              }
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.OperationMode value = com.impinj.stp.StpApi.OperationMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                operationMode_ = value;
              }
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.OperationResponsibility.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = operationResponsibility_.toBuilder();
              }
              operationResponsibility_ = input.readMessage(com.impinj.stp.StpApi.OperationResponsibility.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(operationResponsibility_);
                operationResponsibility_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.TriggerConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = triggerConfig_.toBuilder();
              }
              triggerConfig_ = input.readMessage(com.impinj.stp.StpApi.TriggerConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(triggerConfig_);
                triggerConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 58: {
              com.impinj.stp.StpApi.GPIConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = gPIConfig_.toBuilder();
              }
              gPIConfig_ = input.readMessage(com.impinj.stp.StpApi.GPIConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gPIConfig_);
                gPIConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 66: {
              com.impinj.stp.StpApi.GPOConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = gPOConfig_.toBuilder();
              }
              gPOConfig_ = input.readMessage(com.impinj.stp.StpApi.GPOConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gPOConfig_);
                gPOConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 74: {
              com.impinj.stp.StpApi.ReportConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = reportConfig_.toBuilder();
              }
              reportConfig_ = input.readMessage(com.impinj.stp.StpApi.ReportConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reportConfig_);
                reportConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.DeviceConfig.class, com.impinj.stp.StpApi.DeviceConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<DeviceConfig> PARSER =
        new com.google.protobuf.AbstractParser<DeviceConfig>() {
      public DeviceConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeviceConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Region region = 2;
    public static final int REGION_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.Region region_;
    /**
     *
     * repeated    LicenseKey
     * installed_license_keys              = 1;
     */
    public boolean hasRegion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * repeated    LicenseKey
     * installed_license_keys              = 1;
     */
    public com.impinj.stp.StpApi.Region getRegion() {
      return region_;
    }
    /**
     *
     * repeated    LicenseKey
     * installed_license_keys              = 1;
     */
    public com.impinj.stp.StpApi.RegionOrBuilder getRegionOrBuilder() {
      return region_;
    }

    // required .Impinj.STP.DeviceMode device_mode = 3 [default = DEVICE_MODE_INVENTORY];
    public static final int DEVICE_MODE_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.DeviceMode deviceMode_;
    /**
     */
    public boolean hasDeviceMode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceMode getDeviceMode() {
      return deviceMode_;
    }

    // required .Impinj.STP.OperationMode operation_mode = 4 [default = OPERATION_MODE_CONTINUOUS];
    public static final int OPERATION_MODE_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.OperationMode operationMode_;
    /**
     */
    public boolean hasOperationMode() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationMode getOperationMode() {
      return operationMode_;
    }

    // optional .Impinj.STP.OperationResponsibility operation_responsibility = 5;
    public static final int OPERATION_RESPONSIBILITY_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.OperationResponsibility operationResponsibility_;
    /**
     */
    public boolean hasOperationResponsibility() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationResponsibility getOperationResponsibility() {
      return operationResponsibility_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationResponsibilityOrBuilder getOperationResponsibilityOrBuilder() {
      return operationResponsibility_;
    }

    // optional .Impinj.STP.TriggerConfig trigger_config = 6;
    public static final int TRIGGER_CONFIG_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.TriggerConfig triggerConfig_;
    /**
     */
    public boolean hasTriggerConfig() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public com.impinj.stp.StpApi.TriggerConfig getTriggerConfig() {
      return triggerConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TriggerConfigOrBuilder getTriggerConfigOrBuilder() {
      return triggerConfig_;
    }

    // optional .Impinj.STP.GPIConfig GPI_config = 7;
    public static final int GPI_CONFIG_FIELD_NUMBER = 7;
    private com.impinj.stp.StpApi.GPIConfig gPIConfig_;
    /**
     */
    public boolean hasGPIConfig() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.impinj.stp.StpApi.GPIConfig getGPIConfig() {
      return gPIConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GPIConfigOrBuilder getGPIConfigOrBuilder() {
      return gPIConfig_;
    }

    // optional .Impinj.STP.GPOConfig GPO_config = 8;
    public static final int GPO_CONFIG_FIELD_NUMBER = 8;
    private com.impinj.stp.StpApi.GPOConfig gPOConfig_;
    /**
     */
    public boolean hasGPOConfig() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     */
    public com.impinj.stp.StpApi.GPOConfig getGPOConfig() {
      return gPOConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GPOConfigOrBuilder getGPOConfigOrBuilder() {
      return gPOConfig_;
    }

    // optional .Impinj.STP.ReportConfig report_config = 9;
    public static final int REPORT_CONFIG_FIELD_NUMBER = 9;
    private com.impinj.stp.StpApi.ReportConfig reportConfig_;
    /**
     */
    public boolean hasReportConfig() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     */
    public com.impinj.stp.StpApi.ReportConfig getReportConfig() {
      return reportConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReportConfigOrBuilder getReportConfigOrBuilder() {
      return reportConfig_;
    }

    private void initFields() {
      region_ = com.impinj.stp.StpApi.Region.getDefaultInstance();
      deviceMode_ = com.impinj.stp.StpApi.DeviceMode.DEVICE_MODE_INVENTORY;
      operationMode_ = com.impinj.stp.StpApi.OperationMode.OPERATION_MODE_CONTINUOUS;
      operationResponsibility_ = com.impinj.stp.StpApi.OperationResponsibility.getDefaultInstance();
      triggerConfig_ = com.impinj.stp.StpApi.TriggerConfig.getDefaultInstance();
      gPIConfig_ = com.impinj.stp.StpApi.GPIConfig.getDefaultInstance();
      gPOConfig_ = com.impinj.stp.StpApi.GPOConfig.getDefaultInstance();
      reportConfig_ = com.impinj.stp.StpApi.ReportConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasDeviceMode()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasOperationMode()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasRegion()) {
        if (!getRegion().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasOperationResponsibility()) {
        if (!getOperationResponsibility().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasReportConfig()) {
        if (!getReportConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(2, region_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(3, deviceMode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(4, operationMode_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(5, operationResponsibility_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(6, triggerConfig_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(7, gPIConfig_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(8, gPOConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(9, reportConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, region_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, deviceMode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, operationMode_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, operationResponsibility_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, triggerConfig_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, gPIConfig_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, gPOConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, reportConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.DeviceConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.DeviceConfig}
     *
     * Defines the behavior of the device. See
     * SetDeviceConfigResp_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.DeviceConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.DeviceConfig.class, com.impinj.stp.StpApi.DeviceConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.DeviceConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getRegionFieldBuilder();
          getOperationResponsibilityFieldBuilder();
          getTriggerConfigFieldBuilder();
          getGPIConfigFieldBuilder();
          getGPOConfigFieldBuilder();
          getReportConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (regionBuilder_ == null) {
          region_ = com.impinj.stp.StpApi.Region.getDefaultInstance();
        } else {
          regionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        deviceMode_ = com.impinj.stp.StpApi.DeviceMode.DEVICE_MODE_INVENTORY;
        bitField0_ = (bitField0_ & ~0x00000002);
        operationMode_ = com.impinj.stp.StpApi.OperationMode.OPERATION_MODE_CONTINUOUS;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (operationResponsibilityBuilder_ == null) {
          operationResponsibility_ = com.impinj.stp.StpApi.OperationResponsibility.getDefaultInstance();
        } else {
          operationResponsibilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (triggerConfigBuilder_ == null) {
          triggerConfig_ = com.impinj.stp.StpApi.TriggerConfig.getDefaultInstance();
        } else {
          triggerConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (gPIConfigBuilder_ == null) {
          gPIConfig_ = com.impinj.stp.StpApi.GPIConfig.getDefaultInstance();
        } else {
          gPIConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (gPOConfigBuilder_ == null) {
          gPOConfig_ = com.impinj.stp.StpApi.GPOConfig.getDefaultInstance();
        } else {
          gPOConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (reportConfigBuilder_ == null) {
          reportConfig_ = com.impinj.stp.StpApi.ReportConfig.getDefaultInstance();
        } else {
          reportConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceConfig_descriptor;
      }

      public com.impinj.stp.StpApi.DeviceConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.DeviceConfig build() {
        com.impinj.stp.StpApi.DeviceConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.DeviceConfig buildPartial() {
        com.impinj.stp.StpApi.DeviceConfig result = new com.impinj.stp.StpApi.DeviceConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (regionBuilder_ == null) {
          result.region_ = region_;
        } else {
          result.region_ = regionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.deviceMode_ = deviceMode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.operationMode_ = operationMode_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (operationResponsibilityBuilder_ == null) {
          result.operationResponsibility_ = operationResponsibility_;
        } else {
          result.operationResponsibility_ = operationResponsibilityBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (triggerConfigBuilder_ == null) {
          result.triggerConfig_ = triggerConfig_;
        } else {
          result.triggerConfig_ = triggerConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (gPIConfigBuilder_ == null) {
          result.gPIConfig_ = gPIConfig_;
        } else {
          result.gPIConfig_ = gPIConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (gPOConfigBuilder_ == null) {
          result.gPOConfig_ = gPOConfig_;
        } else {
          result.gPOConfig_ = gPOConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (reportConfigBuilder_ == null) {
          result.reportConfig_ = reportConfig_;
        } else {
          result.reportConfig_ = reportConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.DeviceConfig) {
          return mergeFrom((com.impinj.stp.StpApi.DeviceConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.DeviceConfig other) {
        if (other == com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance()) return this;
        if (other.hasRegion()) {
          mergeRegion(other.getRegion());
        }
        if (other.hasDeviceMode()) {
          setDeviceMode(other.getDeviceMode());
        }
        if (other.hasOperationMode()) {
          setOperationMode(other.getOperationMode());
        }
        if (other.hasOperationResponsibility()) {
          mergeOperationResponsibility(other.getOperationResponsibility());
        }
        if (other.hasTriggerConfig()) {
          mergeTriggerConfig(other.getTriggerConfig());
        }
        if (other.hasGPIConfig()) {
          mergeGPIConfig(other.getGPIConfig());
        }
        if (other.hasGPOConfig()) {
          mergeGPOConfig(other.getGPOConfig());
        }
        if (other.hasReportConfig()) {
          mergeReportConfig(other.getReportConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasDeviceMode()) {
          
          return false;
        }
        if (!hasOperationMode()) {
          
          return false;
        }
        if (hasRegion()) {
          if (!getRegion().isInitialized()) {
            
            return false;
          }
        }
        if (hasOperationResponsibility()) {
          if (!getOperationResponsibility().isInitialized()) {
            
            return false;
          }
        }
        if (hasReportConfig()) {
          if (!getReportConfig().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.DeviceConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.DeviceConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Region region = 2;
      private com.impinj.stp.StpApi.Region region_ = com.impinj.stp.StpApi.Region.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Region, com.impinj.stp.StpApi.Region.Builder, com.impinj.stp.StpApi.RegionOrBuilder> regionBuilder_;
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public boolean hasRegion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public com.impinj.stp.StpApi.Region getRegion() {
        if (regionBuilder_ == null) {
          return region_;
        } else {
          return regionBuilder_.getMessage();
        }
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public Builder setRegion(com.impinj.stp.StpApi.Region value) {
        if (regionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          region_ = value;
          onChanged();
        } else {
          regionBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public Builder setRegion(
          com.impinj.stp.StpApi.Region.Builder builderForValue) {
        if (regionBuilder_ == null) {
          region_ = builderForValue.build();
          onChanged();
        } else {
          regionBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public Builder mergeRegion(com.impinj.stp.StpApi.Region value) {
        if (regionBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              region_ != com.impinj.stp.StpApi.Region.getDefaultInstance()) {
            region_ =
              com.impinj.stp.StpApi.Region.newBuilder(region_).mergeFrom(value).buildPartial();
          } else {
            region_ = value;
          }
          onChanged();
        } else {
          regionBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public Builder clearRegion() {
        if (regionBuilder_ == null) {
          region_ = com.impinj.stp.StpApi.Region.getDefaultInstance();
          onChanged();
        } else {
          regionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public com.impinj.stp.StpApi.Region.Builder getRegionBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getRegionFieldBuilder().getBuilder();
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      public com.impinj.stp.StpApi.RegionOrBuilder getRegionOrBuilder() {
        if (regionBuilder_ != null) {
          return regionBuilder_.getMessageOrBuilder();
        } else {
          return region_;
        }
      }
      /**
       *
       * repeated    LicenseKey
       * installed_license_keys              = 1;
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Region, com.impinj.stp.StpApi.Region.Builder, com.impinj.stp.StpApi.RegionOrBuilder> 
          getRegionFieldBuilder() {
        if (regionBuilder_ == null) {
          regionBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Region, com.impinj.stp.StpApi.Region.Builder, com.impinj.stp.StpApi.RegionOrBuilder>(
                  region_,
                  getParentForChildren(),
                  isClean());
          region_ = null;
        }
        return regionBuilder_;
      }

      // required .Impinj.STP.DeviceMode device_mode = 3 [default = DEVICE_MODE_INVENTORY];
      private com.impinj.stp.StpApi.DeviceMode deviceMode_ = com.impinj.stp.StpApi.DeviceMode.DEVICE_MODE_INVENTORY;
      /**
       */
      public boolean hasDeviceMode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceMode getDeviceMode() {
        return deviceMode_;
      }
      /**
       */
      public Builder setDeviceMode(com.impinj.stp.StpApi.DeviceMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        deviceMode_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearDeviceMode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        deviceMode_ = com.impinj.stp.StpApi.DeviceMode.DEVICE_MODE_INVENTORY;
        onChanged();
        return this;
      }

      // required .Impinj.STP.OperationMode operation_mode = 4 [default = OPERATION_MODE_CONTINUOUS];
      private com.impinj.stp.StpApi.OperationMode operationMode_ = com.impinj.stp.StpApi.OperationMode.OPERATION_MODE_CONTINUOUS;
      /**
       */
      public boolean hasOperationMode() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationMode getOperationMode() {
        return operationMode_;
      }
      /**
       */
      public Builder setOperationMode(com.impinj.stp.StpApi.OperationMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        operationMode_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearOperationMode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        operationMode_ = com.impinj.stp.StpApi.OperationMode.OPERATION_MODE_CONTINUOUS;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.OperationResponsibility operation_responsibility = 5;
      private com.impinj.stp.StpApi.OperationResponsibility operationResponsibility_ = com.impinj.stp.StpApi.OperationResponsibility.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationResponsibility, com.impinj.stp.StpApi.OperationResponsibility.Builder, com.impinj.stp.StpApi.OperationResponsibilityOrBuilder> operationResponsibilityBuilder_;
      /**
       */
      public boolean hasOperationResponsibility() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationResponsibility getOperationResponsibility() {
        if (operationResponsibilityBuilder_ == null) {
          return operationResponsibility_;
        } else {
          return operationResponsibilityBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOperationResponsibility(com.impinj.stp.StpApi.OperationResponsibility value) {
        if (operationResponsibilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          operationResponsibility_ = value;
          onChanged();
        } else {
          operationResponsibilityBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setOperationResponsibility(
          com.impinj.stp.StpApi.OperationResponsibility.Builder builderForValue) {
        if (operationResponsibilityBuilder_ == null) {
          operationResponsibility_ = builderForValue.build();
          onChanged();
        } else {
          operationResponsibilityBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeOperationResponsibility(com.impinj.stp.StpApi.OperationResponsibility value) {
        if (operationResponsibilityBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              operationResponsibility_ != com.impinj.stp.StpApi.OperationResponsibility.getDefaultInstance()) {
            operationResponsibility_ =
              com.impinj.stp.StpApi.OperationResponsibility.newBuilder(operationResponsibility_).mergeFrom(value).buildPartial();
          } else {
            operationResponsibility_ = value;
          }
          onChanged();
        } else {
          operationResponsibilityBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearOperationResponsibility() {
        if (operationResponsibilityBuilder_ == null) {
          operationResponsibility_ = com.impinj.stp.StpApi.OperationResponsibility.getDefaultInstance();
          onChanged();
        } else {
          operationResponsibilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationResponsibility.Builder getOperationResponsibilityBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getOperationResponsibilityFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationResponsibilityOrBuilder getOperationResponsibilityOrBuilder() {
        if (operationResponsibilityBuilder_ != null) {
          return operationResponsibilityBuilder_.getMessageOrBuilder();
        } else {
          return operationResponsibility_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationResponsibility, com.impinj.stp.StpApi.OperationResponsibility.Builder, com.impinj.stp.StpApi.OperationResponsibilityOrBuilder> 
          getOperationResponsibilityFieldBuilder() {
        if (operationResponsibilityBuilder_ == null) {
          operationResponsibilityBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OperationResponsibility, com.impinj.stp.StpApi.OperationResponsibility.Builder, com.impinj.stp.StpApi.OperationResponsibilityOrBuilder>(
                  operationResponsibility_,
                  getParentForChildren(),
                  isClean());
          operationResponsibility_ = null;
        }
        return operationResponsibilityBuilder_;
      }

      // optional .Impinj.STP.TriggerConfig trigger_config = 6;
      private com.impinj.stp.StpApi.TriggerConfig triggerConfig_ = com.impinj.stp.StpApi.TriggerConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TriggerConfig, com.impinj.stp.StpApi.TriggerConfig.Builder, com.impinj.stp.StpApi.TriggerConfigOrBuilder> triggerConfigBuilder_;
      /**
       */
      public boolean hasTriggerConfig() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public com.impinj.stp.StpApi.TriggerConfig getTriggerConfig() {
        if (triggerConfigBuilder_ == null) {
          return triggerConfig_;
        } else {
          return triggerConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTriggerConfig(com.impinj.stp.StpApi.TriggerConfig value) {
        if (triggerConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          triggerConfig_ = value;
          onChanged();
        } else {
          triggerConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder setTriggerConfig(
          com.impinj.stp.StpApi.TriggerConfig.Builder builderForValue) {
        if (triggerConfigBuilder_ == null) {
          triggerConfig_ = builderForValue.build();
          onChanged();
        } else {
          triggerConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder mergeTriggerConfig(com.impinj.stp.StpApi.TriggerConfig value) {
        if (triggerConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              triggerConfig_ != com.impinj.stp.StpApi.TriggerConfig.getDefaultInstance()) {
            triggerConfig_ =
              com.impinj.stp.StpApi.TriggerConfig.newBuilder(triggerConfig_).mergeFrom(value).buildPartial();
          } else {
            triggerConfig_ = value;
          }
          onChanged();
        } else {
          triggerConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder clearTriggerConfig() {
        if (triggerConfigBuilder_ == null) {
          triggerConfig_ = com.impinj.stp.StpApi.TriggerConfig.getDefaultInstance();
          onChanged();
        } else {
          triggerConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TriggerConfig.Builder getTriggerConfigBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getTriggerConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TriggerConfigOrBuilder getTriggerConfigOrBuilder() {
        if (triggerConfigBuilder_ != null) {
          return triggerConfigBuilder_.getMessageOrBuilder();
        } else {
          return triggerConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TriggerConfig, com.impinj.stp.StpApi.TriggerConfig.Builder, com.impinj.stp.StpApi.TriggerConfigOrBuilder> 
          getTriggerConfigFieldBuilder() {
        if (triggerConfigBuilder_ == null) {
          triggerConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TriggerConfig, com.impinj.stp.StpApi.TriggerConfig.Builder, com.impinj.stp.StpApi.TriggerConfigOrBuilder>(
                  triggerConfig_,
                  getParentForChildren(),
                  isClean());
          triggerConfig_ = null;
        }
        return triggerConfigBuilder_;
      }

      // optional .Impinj.STP.GPIConfig GPI_config = 7;
      private com.impinj.stp.StpApi.GPIConfig gPIConfig_ = com.impinj.stp.StpApi.GPIConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GPIConfig, com.impinj.stp.StpApi.GPIConfig.Builder, com.impinj.stp.StpApi.GPIConfigOrBuilder> gPIConfigBuilder_;
      /**
       */
      public boolean hasGPIConfig() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.GPIConfig getGPIConfig() {
        if (gPIConfigBuilder_ == null) {
          return gPIConfig_;
        } else {
          return gPIConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGPIConfig(com.impinj.stp.StpApi.GPIConfig value) {
        if (gPIConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gPIConfig_ = value;
          onChanged();
        } else {
          gPIConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setGPIConfig(
          com.impinj.stp.StpApi.GPIConfig.Builder builderForValue) {
        if (gPIConfigBuilder_ == null) {
          gPIConfig_ = builderForValue.build();
          onChanged();
        } else {
          gPIConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeGPIConfig(com.impinj.stp.StpApi.GPIConfig value) {
        if (gPIConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              gPIConfig_ != com.impinj.stp.StpApi.GPIConfig.getDefaultInstance()) {
            gPIConfig_ =
              com.impinj.stp.StpApi.GPIConfig.newBuilder(gPIConfig_).mergeFrom(value).buildPartial();
          } else {
            gPIConfig_ = value;
          }
          onChanged();
        } else {
          gPIConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearGPIConfig() {
        if (gPIConfigBuilder_ == null) {
          gPIConfig_ = com.impinj.stp.StpApi.GPIConfig.getDefaultInstance();
          onChanged();
        } else {
          gPIConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GPIConfig.Builder getGPIConfigBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getGPIConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GPIConfigOrBuilder getGPIConfigOrBuilder() {
        if (gPIConfigBuilder_ != null) {
          return gPIConfigBuilder_.getMessageOrBuilder();
        } else {
          return gPIConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GPIConfig, com.impinj.stp.StpApi.GPIConfig.Builder, com.impinj.stp.StpApi.GPIConfigOrBuilder> 
          getGPIConfigFieldBuilder() {
        if (gPIConfigBuilder_ == null) {
          gPIConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GPIConfig, com.impinj.stp.StpApi.GPIConfig.Builder, com.impinj.stp.StpApi.GPIConfigOrBuilder>(
                  gPIConfig_,
                  getParentForChildren(),
                  isClean());
          gPIConfig_ = null;
        }
        return gPIConfigBuilder_;
      }

      // optional .Impinj.STP.GPOConfig GPO_config = 8;
      private com.impinj.stp.StpApi.GPOConfig gPOConfig_ = com.impinj.stp.StpApi.GPOConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GPOConfig, com.impinj.stp.StpApi.GPOConfig.Builder, com.impinj.stp.StpApi.GPOConfigOrBuilder> gPOConfigBuilder_;
      /**
       */
      public boolean hasGPOConfig() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       */
      public com.impinj.stp.StpApi.GPOConfig getGPOConfig() {
        if (gPOConfigBuilder_ == null) {
          return gPOConfig_;
        } else {
          return gPOConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGPOConfig(com.impinj.stp.StpApi.GPOConfig value) {
        if (gPOConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gPOConfig_ = value;
          onChanged();
        } else {
          gPOConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder setGPOConfig(
          com.impinj.stp.StpApi.GPOConfig.Builder builderForValue) {
        if (gPOConfigBuilder_ == null) {
          gPOConfig_ = builderForValue.build();
          onChanged();
        } else {
          gPOConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder mergeGPOConfig(com.impinj.stp.StpApi.GPOConfig value) {
        if (gPOConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              gPOConfig_ != com.impinj.stp.StpApi.GPOConfig.getDefaultInstance()) {
            gPOConfig_ =
              com.impinj.stp.StpApi.GPOConfig.newBuilder(gPOConfig_).mergeFrom(value).buildPartial();
          } else {
            gPOConfig_ = value;
          }
          onChanged();
        } else {
          gPOConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder clearGPOConfig() {
        if (gPOConfigBuilder_ == null) {
          gPOConfig_ = com.impinj.stp.StpApi.GPOConfig.getDefaultInstance();
          onChanged();
        } else {
          gPOConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GPOConfig.Builder getGPOConfigBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getGPOConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GPOConfigOrBuilder getGPOConfigOrBuilder() {
        if (gPOConfigBuilder_ != null) {
          return gPOConfigBuilder_.getMessageOrBuilder();
        } else {
          return gPOConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GPOConfig, com.impinj.stp.StpApi.GPOConfig.Builder, com.impinj.stp.StpApi.GPOConfigOrBuilder> 
          getGPOConfigFieldBuilder() {
        if (gPOConfigBuilder_ == null) {
          gPOConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GPOConfig, com.impinj.stp.StpApi.GPOConfig.Builder, com.impinj.stp.StpApi.GPOConfigOrBuilder>(
                  gPOConfig_,
                  getParentForChildren(),
                  isClean());
          gPOConfig_ = null;
        }
        return gPOConfigBuilder_;
      }

      // optional .Impinj.STP.ReportConfig report_config = 9;
      private com.impinj.stp.StpApi.ReportConfig reportConfig_ = com.impinj.stp.StpApi.ReportConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.ReportConfig, com.impinj.stp.StpApi.ReportConfig.Builder, com.impinj.stp.StpApi.ReportConfigOrBuilder> reportConfigBuilder_;
      /**
       */
      public boolean hasReportConfig() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       */
      public com.impinj.stp.StpApi.ReportConfig getReportConfig() {
        if (reportConfigBuilder_ == null) {
          return reportConfig_;
        } else {
          return reportConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReportConfig(com.impinj.stp.StpApi.ReportConfig value) {
        if (reportConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reportConfig_ = value;
          onChanged();
        } else {
          reportConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder setReportConfig(
          com.impinj.stp.StpApi.ReportConfig.Builder builderForValue) {
        if (reportConfigBuilder_ == null) {
          reportConfig_ = builderForValue.build();
          onChanged();
        } else {
          reportConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder mergeReportConfig(com.impinj.stp.StpApi.ReportConfig value) {
        if (reportConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              reportConfig_ != com.impinj.stp.StpApi.ReportConfig.getDefaultInstance()) {
            reportConfig_ =
              com.impinj.stp.StpApi.ReportConfig.newBuilder(reportConfig_).mergeFrom(value).buildPartial();
          } else {
            reportConfig_ = value;
          }
          onChanged();
        } else {
          reportConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder clearReportConfig() {
        if (reportConfigBuilder_ == null) {
          reportConfig_ = com.impinj.stp.StpApi.ReportConfig.getDefaultInstance();
          onChanged();
        } else {
          reportConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.ReportConfig.Builder getReportConfigBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getReportConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReportConfigOrBuilder getReportConfigOrBuilder() {
        if (reportConfigBuilder_ != null) {
          return reportConfigBuilder_.getMessageOrBuilder();
        } else {
          return reportConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.ReportConfig, com.impinj.stp.StpApi.ReportConfig.Builder, com.impinj.stp.StpApi.ReportConfigOrBuilder> 
          getReportConfigFieldBuilder() {
        if (reportConfigBuilder_ == null) {
          reportConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.ReportConfig, com.impinj.stp.StpApi.ReportConfig.Builder, com.impinj.stp.StpApi.ReportConfigOrBuilder>(
                  reportConfig_,
                  getParentForChildren(),
                  isClean());
          reportConfig_ = null;
        }
        return reportConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.DeviceConfig)
    }

    static {
      defaultInstance = new DeviceConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.DeviceConfig)
  }

  public interface TriggerConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.StartTriggerConfig start_trigger_config = 1;
    /**
     */
    boolean hasStartTriggerConfig();
    /**
     */
    com.impinj.stp.StpApi.StartTriggerConfig getStartTriggerConfig();
    /**
     */
    com.impinj.stp.StpApi.StartTriggerConfigOrBuilder getStartTriggerConfigOrBuilder();

    // optional .Impinj.STP.StopTriggerConfig stop_trigger_config = 2;
    /**
     */
    boolean hasStopTriggerConfig();
    /**
     */
    com.impinj.stp.StpApi.StopTriggerConfig getStopTriggerConfig();
    /**
     */
    com.impinj.stp.StpApi.StopTriggerConfigOrBuilder getStopTriggerConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.TriggerConfig}
   *
   * Define how GPI signals affect operations start and stop.
   */
  public static final class TriggerConfig extends
      com.google.protobuf.GeneratedMessage
      implements TriggerConfigOrBuilder {
    // Use TriggerConfig.newBuilder() to construct.
    private TriggerConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TriggerConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TriggerConfig defaultInstance;
    public static TriggerConfig getDefaultInstance() {
      return defaultInstance;
    }

    public TriggerConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TriggerConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.StartTriggerConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = startTriggerConfig_.toBuilder();
              }
              startTriggerConfig_ = input.readMessage(com.impinj.stp.StpApi.StartTriggerConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(startTriggerConfig_);
                startTriggerConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.StopTriggerConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = stopTriggerConfig_.toBuilder();
              }
              stopTriggerConfig_ = input.readMessage(com.impinj.stp.StpApi.StopTriggerConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stopTriggerConfig_);
                stopTriggerConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TriggerConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TriggerConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TriggerConfig.class, com.impinj.stp.StpApi.TriggerConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<TriggerConfig> PARSER =
        new com.google.protobuf.AbstractParser<TriggerConfig>() {
      public TriggerConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TriggerConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TriggerConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.StartTriggerConfig start_trigger_config = 1;
    public static final int START_TRIGGER_CONFIG_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.StartTriggerConfig startTriggerConfig_;
    /**
     */
    public boolean hasStartTriggerConfig() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.StartTriggerConfig getStartTriggerConfig() {
      return startTriggerConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.StartTriggerConfigOrBuilder getStartTriggerConfigOrBuilder() {
      return startTriggerConfig_;
    }

    // optional .Impinj.STP.StopTriggerConfig stop_trigger_config = 2;
    public static final int STOP_TRIGGER_CONFIG_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.StopTriggerConfig stopTriggerConfig_;
    /**
     */
    public boolean hasStopTriggerConfig() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.StopTriggerConfig getStopTriggerConfig() {
      return stopTriggerConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.StopTriggerConfigOrBuilder getStopTriggerConfigOrBuilder() {
      return stopTriggerConfig_;
    }

    private void initFields() {
      startTriggerConfig_ = com.impinj.stp.StpApi.StartTriggerConfig.getDefaultInstance();
      stopTriggerConfig_ = com.impinj.stp.StpApi.StopTriggerConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, startTriggerConfig_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, stopTriggerConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, startTriggerConfig_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, stopTriggerConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TriggerConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TriggerConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TriggerConfig}
     *
     * Define how GPI signals affect operations start and stop.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TriggerConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TriggerConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TriggerConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TriggerConfig.class, com.impinj.stp.StpApi.TriggerConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TriggerConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getStartTriggerConfigFieldBuilder();
          getStopTriggerConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (startTriggerConfigBuilder_ == null) {
          startTriggerConfig_ = com.impinj.stp.StpApi.StartTriggerConfig.getDefaultInstance();
        } else {
          startTriggerConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (stopTriggerConfigBuilder_ == null) {
          stopTriggerConfig_ = com.impinj.stp.StpApi.StopTriggerConfig.getDefaultInstance();
        } else {
          stopTriggerConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TriggerConfig_descriptor;
      }

      public com.impinj.stp.StpApi.TriggerConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TriggerConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TriggerConfig build() {
        com.impinj.stp.StpApi.TriggerConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TriggerConfig buildPartial() {
        com.impinj.stp.StpApi.TriggerConfig result = new com.impinj.stp.StpApi.TriggerConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (startTriggerConfigBuilder_ == null) {
          result.startTriggerConfig_ = startTriggerConfig_;
        } else {
          result.startTriggerConfig_ = startTriggerConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (stopTriggerConfigBuilder_ == null) {
          result.stopTriggerConfig_ = stopTriggerConfig_;
        } else {
          result.stopTriggerConfig_ = stopTriggerConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TriggerConfig) {
          return mergeFrom((com.impinj.stp.StpApi.TriggerConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TriggerConfig other) {
        if (other == com.impinj.stp.StpApi.TriggerConfig.getDefaultInstance()) return this;
        if (other.hasStartTriggerConfig()) {
          mergeStartTriggerConfig(other.getStartTriggerConfig());
        }
        if (other.hasStopTriggerConfig()) {
          mergeStopTriggerConfig(other.getStopTriggerConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TriggerConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TriggerConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.StartTriggerConfig start_trigger_config = 1;
      private com.impinj.stp.StpApi.StartTriggerConfig startTriggerConfig_ = com.impinj.stp.StpApi.StartTriggerConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StartTriggerConfig, com.impinj.stp.StpApi.StartTriggerConfig.Builder, com.impinj.stp.StpApi.StartTriggerConfigOrBuilder> startTriggerConfigBuilder_;
      /**
       */
      public boolean hasStartTriggerConfig() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.StartTriggerConfig getStartTriggerConfig() {
        if (startTriggerConfigBuilder_ == null) {
          return startTriggerConfig_;
        } else {
          return startTriggerConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setStartTriggerConfig(com.impinj.stp.StpApi.StartTriggerConfig value) {
        if (startTriggerConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          startTriggerConfig_ = value;
          onChanged();
        } else {
          startTriggerConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setStartTriggerConfig(
          com.impinj.stp.StpApi.StartTriggerConfig.Builder builderForValue) {
        if (startTriggerConfigBuilder_ == null) {
          startTriggerConfig_ = builderForValue.build();
          onChanged();
        } else {
          startTriggerConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeStartTriggerConfig(com.impinj.stp.StpApi.StartTriggerConfig value) {
        if (startTriggerConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              startTriggerConfig_ != com.impinj.stp.StpApi.StartTriggerConfig.getDefaultInstance()) {
            startTriggerConfig_ =
              com.impinj.stp.StpApi.StartTriggerConfig.newBuilder(startTriggerConfig_).mergeFrom(value).buildPartial();
          } else {
            startTriggerConfig_ = value;
          }
          onChanged();
        } else {
          startTriggerConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearStartTriggerConfig() {
        if (startTriggerConfigBuilder_ == null) {
          startTriggerConfig_ = com.impinj.stp.StpApi.StartTriggerConfig.getDefaultInstance();
          onChanged();
        } else {
          startTriggerConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.StartTriggerConfig.Builder getStartTriggerConfigBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getStartTriggerConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.StartTriggerConfigOrBuilder getStartTriggerConfigOrBuilder() {
        if (startTriggerConfigBuilder_ != null) {
          return startTriggerConfigBuilder_.getMessageOrBuilder();
        } else {
          return startTriggerConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StartTriggerConfig, com.impinj.stp.StpApi.StartTriggerConfig.Builder, com.impinj.stp.StpApi.StartTriggerConfigOrBuilder> 
          getStartTriggerConfigFieldBuilder() {
        if (startTriggerConfigBuilder_ == null) {
          startTriggerConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.StartTriggerConfig, com.impinj.stp.StpApi.StartTriggerConfig.Builder, com.impinj.stp.StpApi.StartTriggerConfigOrBuilder>(
                  startTriggerConfig_,
                  getParentForChildren(),
                  isClean());
          startTriggerConfig_ = null;
        }
        return startTriggerConfigBuilder_;
      }

      // optional .Impinj.STP.StopTriggerConfig stop_trigger_config = 2;
      private com.impinj.stp.StpApi.StopTriggerConfig stopTriggerConfig_ = com.impinj.stp.StpApi.StopTriggerConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StopTriggerConfig, com.impinj.stp.StpApi.StopTriggerConfig.Builder, com.impinj.stp.StpApi.StopTriggerConfigOrBuilder> stopTriggerConfigBuilder_;
      /**
       */
      public boolean hasStopTriggerConfig() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.StopTriggerConfig getStopTriggerConfig() {
        if (stopTriggerConfigBuilder_ == null) {
          return stopTriggerConfig_;
        } else {
          return stopTriggerConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setStopTriggerConfig(com.impinj.stp.StpApi.StopTriggerConfig value) {
        if (stopTriggerConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          stopTriggerConfig_ = value;
          onChanged();
        } else {
          stopTriggerConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setStopTriggerConfig(
          com.impinj.stp.StpApi.StopTriggerConfig.Builder builderForValue) {
        if (stopTriggerConfigBuilder_ == null) {
          stopTriggerConfig_ = builderForValue.build();
          onChanged();
        } else {
          stopTriggerConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeStopTriggerConfig(com.impinj.stp.StpApi.StopTriggerConfig value) {
        if (stopTriggerConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              stopTriggerConfig_ != com.impinj.stp.StpApi.StopTriggerConfig.getDefaultInstance()) {
            stopTriggerConfig_ =
              com.impinj.stp.StpApi.StopTriggerConfig.newBuilder(stopTriggerConfig_).mergeFrom(value).buildPartial();
          } else {
            stopTriggerConfig_ = value;
          }
          onChanged();
        } else {
          stopTriggerConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearStopTriggerConfig() {
        if (stopTriggerConfigBuilder_ == null) {
          stopTriggerConfig_ = com.impinj.stp.StpApi.StopTriggerConfig.getDefaultInstance();
          onChanged();
        } else {
          stopTriggerConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.StopTriggerConfig.Builder getStopTriggerConfigBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getStopTriggerConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.StopTriggerConfigOrBuilder getStopTriggerConfigOrBuilder() {
        if (stopTriggerConfigBuilder_ != null) {
          return stopTriggerConfigBuilder_.getMessageOrBuilder();
        } else {
          return stopTriggerConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StopTriggerConfig, com.impinj.stp.StpApi.StopTriggerConfig.Builder, com.impinj.stp.StpApi.StopTriggerConfigOrBuilder> 
          getStopTriggerConfigFieldBuilder() {
        if (stopTriggerConfigBuilder_ == null) {
          stopTriggerConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.StopTriggerConfig, com.impinj.stp.StpApi.StopTriggerConfig.Builder, com.impinj.stp.StpApi.StopTriggerConfigOrBuilder>(
                  stopTriggerConfig_,
                  getParentForChildren(),
                  isClean());
          stopTriggerConfig_ = null;
        }
        return stopTriggerConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TriggerConfig)
    }

    static {
      defaultInstance = new TriggerConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TriggerConfig)
  }

  public interface StartTriggerConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_gpi_start_trigger = 1 [default = true];
    /**
     */
    boolean hasEnableGpiStartTrigger();
    /**
     */
    boolean getEnableGpiStartTrigger();
  }
  /**
   * Protobuf type {@code Impinj.STP.StartTriggerConfig}
   *
   * Always accept the start command from the client or
   * optionally a GPI start trigger.
   */
  public static final class StartTriggerConfig extends
      com.google.protobuf.GeneratedMessage
      implements StartTriggerConfigOrBuilder {
    // Use StartTriggerConfig.newBuilder() to construct.
    private StartTriggerConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StartTriggerConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StartTriggerConfig defaultInstance;
    public static StartTriggerConfig getDefaultInstance() {
      return defaultInstance;
    }

    public StartTriggerConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StartTriggerConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableGpiStartTrigger_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartTriggerConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartTriggerConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.StartTriggerConfig.class, com.impinj.stp.StpApi.StartTriggerConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<StartTriggerConfig> PARSER =
        new com.google.protobuf.AbstractParser<StartTriggerConfig>() {
      public StartTriggerConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StartTriggerConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StartTriggerConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_gpi_start_trigger = 1 [default = true];
    public static final int ENABLE_GPI_START_TRIGGER_FIELD_NUMBER = 1;
    private boolean enableGpiStartTrigger_;
    /**
     */
    public boolean hasEnableGpiStartTrigger() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getEnableGpiStartTrigger() {
      return enableGpiStartTrigger_;
    }

    private void initFields() {
      enableGpiStartTrigger_ = true;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableGpiStartTrigger_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableGpiStartTrigger_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StartTriggerConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.StartTriggerConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.StartTriggerConfig}
     *
     * Always accept the start command from the client or
     * optionally a GPI start trigger.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.StartTriggerConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartTriggerConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartTriggerConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.StartTriggerConfig.class, com.impinj.stp.StpApi.StartTriggerConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.StartTriggerConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableGpiStartTrigger_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartTriggerConfig_descriptor;
      }

      public com.impinj.stp.StpApi.StartTriggerConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.StartTriggerConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.StartTriggerConfig build() {
        com.impinj.stp.StpApi.StartTriggerConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.StartTriggerConfig buildPartial() {
        com.impinj.stp.StpApi.StartTriggerConfig result = new com.impinj.stp.StpApi.StartTriggerConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableGpiStartTrigger_ = enableGpiStartTrigger_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.StartTriggerConfig) {
          return mergeFrom((com.impinj.stp.StpApi.StartTriggerConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.StartTriggerConfig other) {
        if (other == com.impinj.stp.StpApi.StartTriggerConfig.getDefaultInstance()) return this;
        if (other.hasEnableGpiStartTrigger()) {
          setEnableGpiStartTrigger(other.getEnableGpiStartTrigger());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.StartTriggerConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.StartTriggerConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_gpi_start_trigger = 1 [default = true];
      private boolean enableGpiStartTrigger_ = true;
      /**
       */
      public boolean hasEnableGpiStartTrigger() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getEnableGpiStartTrigger() {
        return enableGpiStartTrigger_;
      }
      /**
       */
      public Builder setEnableGpiStartTrigger(boolean value) {
        bitField0_ |= 0x00000001;
        enableGpiStartTrigger_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEnableGpiStartTrigger() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableGpiStartTrigger_ = true;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.StartTriggerConfig)
    }

    static {
      defaultInstance = new StartTriggerConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.StartTriggerConfig)
  }

  public interface StopTriggerConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_gpi_stop_trigger = 1 [default = true];
    /**
     *
     * optional    bool
     * enable_count_stop_trigger       = 2 [default = false];
     */
    boolean hasEnableGpiStopTrigger();
    /**
     *
     * optional    bool
     * enable_count_stop_trigger       = 2 [default = false];
     */
    boolean getEnableGpiStopTrigger();

    // optional uint32 timeout = 4 [default = 0];
    /**
     *
     * Timeout in milliseconds. 0 = no timeout.
     */
    boolean hasTimeout();
    /**
     *
     * Timeout in milliseconds. 0 = no timeout.
     */
    int getTimeout();
  }
  /**
   * Protobuf type {@code Impinj.STP.StopTriggerConfig}
   *
   * Always accept stop command from the client or optionally
   * from GPI, count, or timeout.
   */
  public static final class StopTriggerConfig extends
      com.google.protobuf.GeneratedMessage
      implements StopTriggerConfigOrBuilder {
    // Use StopTriggerConfig.newBuilder() to construct.
    private StopTriggerConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StopTriggerConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StopTriggerConfig defaultInstance;
    public static StopTriggerConfig getDefaultInstance() {
      return defaultInstance;
    }

    public StopTriggerConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StopTriggerConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableGpiStopTrigger_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000002;
              timeout_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopTriggerConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopTriggerConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.StopTriggerConfig.class, com.impinj.stp.StpApi.StopTriggerConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<StopTriggerConfig> PARSER =
        new com.google.protobuf.AbstractParser<StopTriggerConfig>() {
      public StopTriggerConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StopTriggerConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StopTriggerConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_gpi_stop_trigger = 1 [default = true];
    public static final int ENABLE_GPI_STOP_TRIGGER_FIELD_NUMBER = 1;
    private boolean enableGpiStopTrigger_;
    /**
     *
     * optional    bool
     * enable_count_stop_trigger       = 2 [default = false];
     */
    public boolean hasEnableGpiStopTrigger() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * optional    bool
     * enable_count_stop_trigger       = 2 [default = false];
     */
    public boolean getEnableGpiStopTrigger() {
      return enableGpiStopTrigger_;
    }

    // optional uint32 timeout = 4 [default = 0];
    public static final int TIMEOUT_FIELD_NUMBER = 4;
    private int timeout_;
    /**
     *
     * Timeout in milliseconds. 0 = no timeout.
     */
    public boolean hasTimeout() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Timeout in milliseconds. 0 = no timeout.
     */
    public int getTimeout() {
      return timeout_;
    }

    private void initFields() {
      enableGpiStopTrigger_ = true;
      timeout_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableGpiStopTrigger_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(4, timeout_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableGpiStopTrigger_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, timeout_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StopTriggerConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.StopTriggerConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.StopTriggerConfig}
     *
     * Always accept stop command from the client or optionally
     * from GPI, count, or timeout.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.StopTriggerConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopTriggerConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopTriggerConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.StopTriggerConfig.class, com.impinj.stp.StpApi.StopTriggerConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.StopTriggerConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableGpiStopTrigger_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        timeout_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StopTriggerConfig_descriptor;
      }

      public com.impinj.stp.StpApi.StopTriggerConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.StopTriggerConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.StopTriggerConfig build() {
        com.impinj.stp.StpApi.StopTriggerConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.StopTriggerConfig buildPartial() {
        com.impinj.stp.StpApi.StopTriggerConfig result = new com.impinj.stp.StpApi.StopTriggerConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableGpiStopTrigger_ = enableGpiStopTrigger_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.timeout_ = timeout_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.StopTriggerConfig) {
          return mergeFrom((com.impinj.stp.StpApi.StopTriggerConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.StopTriggerConfig other) {
        if (other == com.impinj.stp.StpApi.StopTriggerConfig.getDefaultInstance()) return this;
        if (other.hasEnableGpiStopTrigger()) {
          setEnableGpiStopTrigger(other.getEnableGpiStopTrigger());
        }
        if (other.hasTimeout()) {
          setTimeout(other.getTimeout());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.StopTriggerConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.StopTriggerConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_gpi_stop_trigger = 1 [default = true];
      private boolean enableGpiStopTrigger_ = true;
      /**
       *
       * optional    bool
       * enable_count_stop_trigger       = 2 [default = false];
       */
      public boolean hasEnableGpiStopTrigger() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * optional    bool
       * enable_count_stop_trigger       = 2 [default = false];
       */
      public boolean getEnableGpiStopTrigger() {
        return enableGpiStopTrigger_;
      }
      /**
       *
       * optional    bool
       * enable_count_stop_trigger       = 2 [default = false];
       */
      public Builder setEnableGpiStopTrigger(boolean value) {
        bitField0_ |= 0x00000001;
        enableGpiStopTrigger_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * optional    bool
       * enable_count_stop_trigger       = 2 [default = false];
       */
      public Builder clearEnableGpiStopTrigger() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableGpiStopTrigger_ = true;
        onChanged();
        return this;
      }

      // optional uint32 timeout = 4 [default = 0];
      private int timeout_ ;
      /**
       *
       * Timeout in milliseconds. 0 = no timeout.
       */
      public boolean hasTimeout() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Timeout in milliseconds. 0 = no timeout.
       */
      public int getTimeout() {
        return timeout_;
      }
      /**
       *
       * Timeout in milliseconds. 0 = no timeout.
       */
      public Builder setTimeout(int value) {
        bitField0_ |= 0x00000002;
        timeout_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Timeout in milliseconds. 0 = no timeout.
       */
      public Builder clearTimeout() {
        bitField0_ = (bitField0_ & ~0x00000002);
        timeout_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.StopTriggerConfig)
    }

    static {
      defaultInstance = new StopTriggerConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.StopTriggerConfig)
  }

  public interface GPIConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.GPIOSignalMode signaling_mode = 1 [default = GPIO_SIGNAL_MODE_COMBINED];
    /**
     */
    boolean hasSignalingMode();
    /**
     */
    com.impinj.stp.StpApi.GPIOSignalMode getSignalingMode();

    // optional .Impinj.STP.GPIOPolarity GPI1_polarity = 2 [default = GPIO_POLARITY_ACTIVE_LOW];
    /**
     */
    boolean hasGPI1Polarity();
    /**
     */
    com.impinj.stp.StpApi.GPIOPolarity getGPI1Polarity();

    // optional .Impinj.STP.GPIOPolarity GPI2_polarity = 3 [default = GPIO_POLARITY_ACTIVE_LOW];
    /**
     */
    boolean hasGPI2Polarity();
    /**
     */
    com.impinj.stp.StpApi.GPIOPolarity getGPI2Polarity();

    // optional .Impinj.STP.GPIOPolarity GPI3_polarity = 4 [default = GPIO_POLARITY_ACTIVE_LOW];
    /**
     *
     * The time to ignore changes in the input signal to eliminate
     * spurious triggers. In milliseconds.
     */
    boolean hasGPI3Polarity();
    /**
     *
     * The time to ignore changes in the input signal to eliminate
     * spurious triggers. In milliseconds.
     */
    com.impinj.stp.StpApi.GPIOPolarity getGPI3Polarity();
  }
  /**
   * Protobuf type {@code Impinj.STP.GPIConfig}
   *
   * Define how input functions map to signal lines and defines
   * input polarities.
   */
  public static final class GPIConfig extends
      com.google.protobuf.GeneratedMessage
      implements GPIConfigOrBuilder {
    // Use GPIConfig.newBuilder() to construct.
    private GPIConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GPIConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GPIConfig defaultInstance;
    public static GPIConfig getDefaultInstance() {
      return defaultInstance;
    }

    public GPIConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GPIConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOSignalMode value = com.impinj.stp.StpApi.GPIOSignalMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                signalingMode_ = value;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOPolarity value = com.impinj.stp.StpApi.GPIOPolarity.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                gPI1Polarity_ = value;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOPolarity value = com.impinj.stp.StpApi.GPIOPolarity.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                gPI2Polarity_ = value;
              }
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOPolarity value = com.impinj.stp.StpApi.GPIOPolarity.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                gPI3Polarity_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GPIConfig.class, com.impinj.stp.StpApi.GPIConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<GPIConfig> PARSER =
        new com.google.protobuf.AbstractParser<GPIConfig>() {
      public GPIConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GPIConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GPIConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.GPIOSignalMode signaling_mode = 1 [default = GPIO_SIGNAL_MODE_COMBINED];
    public static final int SIGNALING_MODE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.GPIOSignalMode signalingMode_;
    /**
     */
    public boolean hasSignalingMode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.GPIOSignalMode getSignalingMode() {
      return signalingMode_;
    }

    // optional .Impinj.STP.GPIOPolarity GPI1_polarity = 2 [default = GPIO_POLARITY_ACTIVE_LOW];
    public static final int GPI1_POLARITY_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.GPIOPolarity gPI1Polarity_;
    /**
     */
    public boolean hasGPI1Polarity() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.GPIOPolarity getGPI1Polarity() {
      return gPI1Polarity_;
    }

    // optional .Impinj.STP.GPIOPolarity GPI2_polarity = 3 [default = GPIO_POLARITY_ACTIVE_LOW];
    public static final int GPI2_POLARITY_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.GPIOPolarity gPI2Polarity_;
    /**
     */
    public boolean hasGPI2Polarity() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.GPIOPolarity getGPI2Polarity() {
      return gPI2Polarity_;
    }

    // optional .Impinj.STP.GPIOPolarity GPI3_polarity = 4 [default = GPIO_POLARITY_ACTIVE_LOW];
    public static final int GPI3_POLARITY_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.GPIOPolarity gPI3Polarity_;
    /**
     *
     * The time to ignore changes in the input signal to eliminate
     * spurious triggers. In milliseconds.
     */
    public boolean hasGPI3Polarity() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * The time to ignore changes in the input signal to eliminate
     * spurious triggers. In milliseconds.
     */
    public com.impinj.stp.StpApi.GPIOPolarity getGPI3Polarity() {
      return gPI3Polarity_;
    }

    private void initFields() {
      signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_COMBINED;
      gPI1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      gPI2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      gPI3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, signalingMode_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, gPI1Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, gPI2Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(4, gPI3Polarity_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, signalingMode_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, gPI1Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, gPI2Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, gPI3Polarity_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GPIConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GPIConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GPIConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GPIConfig}
     *
     * Define how input functions map to signal lines and defines
     * input polarities.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GPIConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GPIConfig.class, com.impinj.stp.StpApi.GPIConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GPIConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_COMBINED;
        bitField0_ = (bitField0_ & ~0x00000001);
        gPI1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        bitField0_ = (bitField0_ & ~0x00000002);
        gPI2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        bitField0_ = (bitField0_ & ~0x00000004);
        gPI3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIConfig_descriptor;
      }

      public com.impinj.stp.StpApi.GPIConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GPIConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GPIConfig build() {
        com.impinj.stp.StpApi.GPIConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GPIConfig buildPartial() {
        com.impinj.stp.StpApi.GPIConfig result = new com.impinj.stp.StpApi.GPIConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.signalingMode_ = signalingMode_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gPI1Polarity_ = gPI1Polarity_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.gPI2Polarity_ = gPI2Polarity_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.gPI3Polarity_ = gPI3Polarity_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GPIConfig) {
          return mergeFrom((com.impinj.stp.StpApi.GPIConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GPIConfig other) {
        if (other == com.impinj.stp.StpApi.GPIConfig.getDefaultInstance()) return this;
        if (other.hasSignalingMode()) {
          setSignalingMode(other.getSignalingMode());
        }
        if (other.hasGPI1Polarity()) {
          setGPI1Polarity(other.getGPI1Polarity());
        }
        if (other.hasGPI2Polarity()) {
          setGPI2Polarity(other.getGPI2Polarity());
        }
        if (other.hasGPI3Polarity()) {
          setGPI3Polarity(other.getGPI3Polarity());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GPIConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GPIConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.GPIOSignalMode signaling_mode = 1 [default = GPIO_SIGNAL_MODE_COMBINED];
      private com.impinj.stp.StpApi.GPIOSignalMode signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_COMBINED;
      /**
       */
      public boolean hasSignalingMode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.GPIOSignalMode getSignalingMode() {
        return signalingMode_;
      }
      /**
       */
      public Builder setSignalingMode(com.impinj.stp.StpApi.GPIOSignalMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        signalingMode_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearSignalingMode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_COMBINED;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.GPIOPolarity GPI1_polarity = 2 [default = GPIO_POLARITY_ACTIVE_LOW];
      private com.impinj.stp.StpApi.GPIOPolarity gPI1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      /**
       */
      public boolean hasGPI1Polarity() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.GPIOPolarity getGPI1Polarity() {
        return gPI1Polarity_;
      }
      /**
       */
      public Builder setGPI1Polarity(com.impinj.stp.StpApi.GPIOPolarity value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        gPI1Polarity_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearGPI1Polarity() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gPI1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.GPIOPolarity GPI2_polarity = 3 [default = GPIO_POLARITY_ACTIVE_LOW];
      private com.impinj.stp.StpApi.GPIOPolarity gPI2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      /**
       */
      public boolean hasGPI2Polarity() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.GPIOPolarity getGPI2Polarity() {
        return gPI2Polarity_;
      }
      /**
       */
      public Builder setGPI2Polarity(com.impinj.stp.StpApi.GPIOPolarity value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        gPI2Polarity_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearGPI2Polarity() {
        bitField0_ = (bitField0_ & ~0x00000004);
        gPI2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.GPIOPolarity GPI3_polarity = 4 [default = GPIO_POLARITY_ACTIVE_LOW];
      private com.impinj.stp.StpApi.GPIOPolarity gPI3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      /**
       *
       * The time to ignore changes in the input signal to eliminate
       * spurious triggers. In milliseconds.
       */
      public boolean hasGPI3Polarity() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * The time to ignore changes in the input signal to eliminate
       * spurious triggers. In milliseconds.
       */
      public com.impinj.stp.StpApi.GPIOPolarity getGPI3Polarity() {
        return gPI3Polarity_;
      }
      /**
       *
       * The time to ignore changes in the input signal to eliminate
       * spurious triggers. In milliseconds.
       */
      public Builder setGPI3Polarity(com.impinj.stp.StpApi.GPIOPolarity value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        gPI3Polarity_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The time to ignore changes in the input signal to eliminate
       * spurious triggers. In milliseconds.
       */
      public Builder clearGPI3Polarity() {
        bitField0_ = (bitField0_ & ~0x00000008);
        gPI3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GPIConfig)
    }

    static {
      defaultInstance = new GPIConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GPIConfig)
  }

  public interface GPOConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.GPIOSignalMode signaling_mode = 1 [default = GPIO_SIGNAL_MODE_SEPARATE];
    /**
     *
     * Operation pass/fail on the same GPO or separate GPOs.
     */
    boolean hasSignalingMode();
    /**
     *
     * Operation pass/fail on the same GPO or separate GPOs.
     */
    com.impinj.stp.StpApi.GPIOSignalMode getSignalingMode();

    // optional .Impinj.STP.GPIOPolarity GPO1_polarity = 6 [default = GPIO_POLARITY_ACTIVE_LOW];
    /**
     *
     * Operation Status - Start and Complete
     */
    boolean hasGPO1Polarity();
    /**
     *
     * Operation Status - Start and Complete
     */
    com.impinj.stp.StpApi.GPIOPolarity getGPO1Polarity();

    // optional .Impinj.STP.GPIOPolarity GPO2_polarity = 2 [default = GPIO_POLARITY_ACTIVE_LOW];
    /**
     *
     * In separate output mode, GPO2 will indicate with this
     * polarity that the operation passed. In combined mode when
     * the operation clock transitions, this setting indicates pass
     * and the opposite polarity failure.
     */
    boolean hasGPO2Polarity();
    /**
     *
     * In separate output mode, GPO2 will indicate with this
     * polarity that the operation passed. In combined mode when
     * the operation clock transitions, this setting indicates pass
     * and the opposite polarity failure.
     */
    com.impinj.stp.StpApi.GPIOPolarity getGPO2Polarity();

    // optional .Impinj.STP.GPIOPolarity GPO3_polarity = 3 [default = GPIO_POLARITY_ACTIVE_LOW];
    /**
     *
     * In separate output mode, a failure will set GPO3 low or high
     * depending on this setting.
     */
    boolean hasGPO3Polarity();
    /**
     *
     * In separate output mode, a failure will set GPO3 low or high
     * depending on this setting.
     */
    com.impinj.stp.StpApi.GPIOPolarity getGPO3Polarity();

    // optional uint32 GPO_pulse_duration = 4 [default = 1];
    /**
     *
     * The output pulse duration in milliseconds. A value of zero
     * means toggle as fast as possible.
     */
    boolean hasGPOPulseDuration();
    /**
     *
     * The output pulse duration in milliseconds. A value of zero
     * means toggle as fast as possible.
     */
    int getGPOPulseDuration();

    // optional bool enable_operation_result_gpo = 5 [default = true];
    /**
     *
     * If set to true, the GPO will change when the operation is
     * complete. If false the client may set pass/fail with the
     * set_operation_result_gpo command.
     */
    boolean hasEnableOperationResultGpo();
    /**
     *
     * If set to true, the GPO will change when the operation is
     * complete. If false the client may set pass/fail with the
     * set_operation_result_gpo command.
     */
    boolean getEnableOperationResultGpo();
  }
  /**
   * Protobuf type {@code Impinj.STP.GPOConfig}
   *
   * Define how output functions map to signal lines and defines
   * output polarities.
   */
  public static final class GPOConfig extends
      com.google.protobuf.GeneratedMessage
      implements GPOConfigOrBuilder {
    // Use GPOConfig.newBuilder() to construct.
    private GPOConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GPOConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GPOConfig defaultInstance;
    public static GPOConfig getDefaultInstance() {
      return defaultInstance;
    }

    public GPOConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GPOConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOSignalMode value = com.impinj.stp.StpApi.GPIOSignalMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                signalingMode_ = value;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOPolarity value = com.impinj.stp.StpApi.GPIOPolarity.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                gPO2Polarity_ = value;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOPolarity value = com.impinj.stp.StpApi.GPIOPolarity.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                gPO3Polarity_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000010;
              gPOPulseDuration_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000020;
              enableOperationResultGpo_ = input.readBool();
              break;
            }
            case 48: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.GPIOPolarity value = com.impinj.stp.StpApi.GPIOPolarity.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(6, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                gPO1Polarity_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPOConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPOConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GPOConfig.class, com.impinj.stp.StpApi.GPOConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<GPOConfig> PARSER =
        new com.google.protobuf.AbstractParser<GPOConfig>() {
      public GPOConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GPOConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GPOConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.GPIOSignalMode signaling_mode = 1 [default = GPIO_SIGNAL_MODE_SEPARATE];
    public static final int SIGNALING_MODE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.GPIOSignalMode signalingMode_;
    /**
     *
     * Operation pass/fail on the same GPO or separate GPOs.
     */
    public boolean hasSignalingMode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Operation pass/fail on the same GPO or separate GPOs.
     */
    public com.impinj.stp.StpApi.GPIOSignalMode getSignalingMode() {
      return signalingMode_;
    }

    // optional .Impinj.STP.GPIOPolarity GPO1_polarity = 6 [default = GPIO_POLARITY_ACTIVE_LOW];
    public static final int GPO1_POLARITY_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.GPIOPolarity gPO1Polarity_;
    /**
     *
     * Operation Status - Start and Complete
     */
    public boolean hasGPO1Polarity() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Operation Status - Start and Complete
     */
    public com.impinj.stp.StpApi.GPIOPolarity getGPO1Polarity() {
      return gPO1Polarity_;
    }

    // optional .Impinj.STP.GPIOPolarity GPO2_polarity = 2 [default = GPIO_POLARITY_ACTIVE_LOW];
    public static final int GPO2_POLARITY_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.GPIOPolarity gPO2Polarity_;
    /**
     *
     * In separate output mode, GPO2 will indicate with this
     * polarity that the operation passed. In combined mode when
     * the operation clock transitions, this setting indicates pass
     * and the opposite polarity failure.
     */
    public boolean hasGPO2Polarity() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * In separate output mode, GPO2 will indicate with this
     * polarity that the operation passed. In combined mode when
     * the operation clock transitions, this setting indicates pass
     * and the opposite polarity failure.
     */
    public com.impinj.stp.StpApi.GPIOPolarity getGPO2Polarity() {
      return gPO2Polarity_;
    }

    // optional .Impinj.STP.GPIOPolarity GPO3_polarity = 3 [default = GPIO_POLARITY_ACTIVE_LOW];
    public static final int GPO3_POLARITY_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.GPIOPolarity gPO3Polarity_;
    /**
     *
     * In separate output mode, a failure will set GPO3 low or high
     * depending on this setting.
     */
    public boolean hasGPO3Polarity() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * In separate output mode, a failure will set GPO3 low or high
     * depending on this setting.
     */
    public com.impinj.stp.StpApi.GPIOPolarity getGPO3Polarity() {
      return gPO3Polarity_;
    }

    // optional uint32 GPO_pulse_duration = 4 [default = 1];
    public static final int GPO_PULSE_DURATION_FIELD_NUMBER = 4;
    private int gPOPulseDuration_;
    /**
     *
     * The output pulse duration in milliseconds. A value of zero
     * means toggle as fast as possible.
     */
    public boolean hasGPOPulseDuration() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * The output pulse duration in milliseconds. A value of zero
     * means toggle as fast as possible.
     */
    public int getGPOPulseDuration() {
      return gPOPulseDuration_;
    }

    // optional bool enable_operation_result_gpo = 5 [default = true];
    public static final int ENABLE_OPERATION_RESULT_GPO_FIELD_NUMBER = 5;
    private boolean enableOperationResultGpo_;
    /**
     *
     * If set to true, the GPO will change when the operation is
     * complete. If false the client may set pass/fail with the
     * set_operation_result_gpo command.
     */
    public boolean hasEnableOperationResultGpo() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * If set to true, the GPO will change when the operation is
     * complete. If false the client may set pass/fail with the
     * set_operation_result_gpo command.
     */
    public boolean getEnableOperationResultGpo() {
      return enableOperationResultGpo_;
    }

    private void initFields() {
      signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_SEPARATE;
      gPO1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      gPO2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      gPO3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      gPOPulseDuration_ = 1;
      enableOperationResultGpo_ = true;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, signalingMode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(2, gPO2Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(3, gPO3Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt32(4, gPOPulseDuration_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(5, enableOperationResultGpo_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(6, gPO1Polarity_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, signalingMode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, gPO2Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, gPO3Polarity_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, gPOPulseDuration_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, enableOperationResultGpo_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(6, gPO1Polarity_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GPOConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GPOConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GPOConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GPOConfig}
     *
     * Define how output functions map to signal lines and defines
     * output polarities.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GPOConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPOConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPOConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GPOConfig.class, com.impinj.stp.StpApi.GPOConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GPOConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_SEPARATE;
        bitField0_ = (bitField0_ & ~0x00000001);
        gPO1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        bitField0_ = (bitField0_ & ~0x00000002);
        gPO2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        bitField0_ = (bitField0_ & ~0x00000004);
        gPO3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        bitField0_ = (bitField0_ & ~0x00000008);
        gPOPulseDuration_ = 1;
        bitField0_ = (bitField0_ & ~0x00000010);
        enableOperationResultGpo_ = true;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPOConfig_descriptor;
      }

      public com.impinj.stp.StpApi.GPOConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GPOConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GPOConfig build() {
        com.impinj.stp.StpApi.GPOConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GPOConfig buildPartial() {
        com.impinj.stp.StpApi.GPOConfig result = new com.impinj.stp.StpApi.GPOConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.signalingMode_ = signalingMode_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gPO1Polarity_ = gPO1Polarity_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.gPO2Polarity_ = gPO2Polarity_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.gPO3Polarity_ = gPO3Polarity_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.gPOPulseDuration_ = gPOPulseDuration_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.enableOperationResultGpo_ = enableOperationResultGpo_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GPOConfig) {
          return mergeFrom((com.impinj.stp.StpApi.GPOConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GPOConfig other) {
        if (other == com.impinj.stp.StpApi.GPOConfig.getDefaultInstance()) return this;
        if (other.hasSignalingMode()) {
          setSignalingMode(other.getSignalingMode());
        }
        if (other.hasGPO1Polarity()) {
          setGPO1Polarity(other.getGPO1Polarity());
        }
        if (other.hasGPO2Polarity()) {
          setGPO2Polarity(other.getGPO2Polarity());
        }
        if (other.hasGPO3Polarity()) {
          setGPO3Polarity(other.getGPO3Polarity());
        }
        if (other.hasGPOPulseDuration()) {
          setGPOPulseDuration(other.getGPOPulseDuration());
        }
        if (other.hasEnableOperationResultGpo()) {
          setEnableOperationResultGpo(other.getEnableOperationResultGpo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GPOConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GPOConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.GPIOSignalMode signaling_mode = 1 [default = GPIO_SIGNAL_MODE_SEPARATE];
      private com.impinj.stp.StpApi.GPIOSignalMode signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_SEPARATE;
      /**
       *
       * Operation pass/fail on the same GPO or separate GPOs.
       */
      public boolean hasSignalingMode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Operation pass/fail on the same GPO or separate GPOs.
       */
      public com.impinj.stp.StpApi.GPIOSignalMode getSignalingMode() {
        return signalingMode_;
      }
      /**
       *
       * Operation pass/fail on the same GPO or separate GPOs.
       */
      public Builder setSignalingMode(com.impinj.stp.StpApi.GPIOSignalMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        signalingMode_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Operation pass/fail on the same GPO or separate GPOs.
       */
      public Builder clearSignalingMode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        signalingMode_ = com.impinj.stp.StpApi.GPIOSignalMode.GPIO_SIGNAL_MODE_SEPARATE;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.GPIOPolarity GPO1_polarity = 6 [default = GPIO_POLARITY_ACTIVE_LOW];
      private com.impinj.stp.StpApi.GPIOPolarity gPO1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      /**
       *
       * Operation Status - Start and Complete
       */
      public boolean hasGPO1Polarity() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Operation Status - Start and Complete
       */
      public com.impinj.stp.StpApi.GPIOPolarity getGPO1Polarity() {
        return gPO1Polarity_;
      }
      /**
       *
       * Operation Status - Start and Complete
       */
      public Builder setGPO1Polarity(com.impinj.stp.StpApi.GPIOPolarity value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        gPO1Polarity_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Operation Status - Start and Complete
       */
      public Builder clearGPO1Polarity() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gPO1Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.GPIOPolarity GPO2_polarity = 2 [default = GPIO_POLARITY_ACTIVE_LOW];
      private com.impinj.stp.StpApi.GPIOPolarity gPO2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      /**
       *
       * In separate output mode, GPO2 will indicate with this
       * polarity that the operation passed. In combined mode when
       * the operation clock transitions, this setting indicates pass
       * and the opposite polarity failure.
       */
      public boolean hasGPO2Polarity() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * In separate output mode, GPO2 will indicate with this
       * polarity that the operation passed. In combined mode when
       * the operation clock transitions, this setting indicates pass
       * and the opposite polarity failure.
       */
      public com.impinj.stp.StpApi.GPIOPolarity getGPO2Polarity() {
        return gPO2Polarity_;
      }
      /**
       *
       * In separate output mode, GPO2 will indicate with this
       * polarity that the operation passed. In combined mode when
       * the operation clock transitions, this setting indicates pass
       * and the opposite polarity failure.
       */
      public Builder setGPO2Polarity(com.impinj.stp.StpApi.GPIOPolarity value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        gPO2Polarity_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * In separate output mode, GPO2 will indicate with this
       * polarity that the operation passed. In combined mode when
       * the operation clock transitions, this setting indicates pass
       * and the opposite polarity failure.
       */
      public Builder clearGPO2Polarity() {
        bitField0_ = (bitField0_ & ~0x00000004);
        gPO2Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.GPIOPolarity GPO3_polarity = 3 [default = GPIO_POLARITY_ACTIVE_LOW];
      private com.impinj.stp.StpApi.GPIOPolarity gPO3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
      /**
       *
       * In separate output mode, a failure will set GPO3 low or high
       * depending on this setting.
       */
      public boolean hasGPO3Polarity() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * In separate output mode, a failure will set GPO3 low or high
       * depending on this setting.
       */
      public com.impinj.stp.StpApi.GPIOPolarity getGPO3Polarity() {
        return gPO3Polarity_;
      }
      /**
       *
       * In separate output mode, a failure will set GPO3 low or high
       * depending on this setting.
       */
      public Builder setGPO3Polarity(com.impinj.stp.StpApi.GPIOPolarity value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        gPO3Polarity_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * In separate output mode, a failure will set GPO3 low or high
       * depending on this setting.
       */
      public Builder clearGPO3Polarity() {
        bitField0_ = (bitField0_ & ~0x00000008);
        gPO3Polarity_ = com.impinj.stp.StpApi.GPIOPolarity.GPIO_POLARITY_ACTIVE_LOW;
        onChanged();
        return this;
      }

      // optional uint32 GPO_pulse_duration = 4 [default = 1];
      private int gPOPulseDuration_ = 1;
      /**
       *
       * The output pulse duration in milliseconds. A value of zero
       * means toggle as fast as possible.
       */
      public boolean hasGPOPulseDuration() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * The output pulse duration in milliseconds. A value of zero
       * means toggle as fast as possible.
       */
      public int getGPOPulseDuration() {
        return gPOPulseDuration_;
      }
      /**
       *
       * The output pulse duration in milliseconds. A value of zero
       * means toggle as fast as possible.
       */
      public Builder setGPOPulseDuration(int value) {
        bitField0_ |= 0x00000010;
        gPOPulseDuration_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The output pulse duration in milliseconds. A value of zero
       * means toggle as fast as possible.
       */
      public Builder clearGPOPulseDuration() {
        bitField0_ = (bitField0_ & ~0x00000010);
        gPOPulseDuration_ = 1;
        onChanged();
        return this;
      }

      // optional bool enable_operation_result_gpo = 5 [default = true];
      private boolean enableOperationResultGpo_ = true;
      /**
       *
       * If set to true, the GPO will change when the operation is
       * complete. If false the client may set pass/fail with the
       * set_operation_result_gpo command.
       */
      public boolean hasEnableOperationResultGpo() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       *
       * If set to true, the GPO will change when the operation is
       * complete. If false the client may set pass/fail with the
       * set_operation_result_gpo command.
       */
      public boolean getEnableOperationResultGpo() {
        return enableOperationResultGpo_;
      }
      /**
       *
       * If set to true, the GPO will change when the operation is
       * complete. If false the client may set pass/fail with the
       * set_operation_result_gpo command.
       */
      public Builder setEnableOperationResultGpo(boolean value) {
        bitField0_ |= 0x00000020;
        enableOperationResultGpo_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * If set to true, the GPO will change when the operation is
       * complete. If false the client may set pass/fail with the
       * set_operation_result_gpo command.
       */
      public Builder clearEnableOperationResultGpo() {
        bitField0_ = (bitField0_ & ~0x00000020);
        enableOperationResultGpo_ = true;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GPOConfig)
    }

    static {
      defaultInstance = new GPOConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GPOConfig)
  }

  public interface STPDeviceOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required string hostname = 1;
    /**
     *
     * This must be an IP address (for now) in the format
     * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
     */
    boolean hasHostname();
    /**
     *
     * This must be an IP address (for now) in the format
     * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
     */
    java.lang.String getHostname();
    /**
     *
     * This must be an IP address (for now) in the format
     * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
     */
    com.google.protobuf.ByteString
        getHostnameBytes();
  }
  /**
   * Protobuf type {@code Impinj.STP.STPDevice}
   */
  public static final class STPDevice extends
      com.google.protobuf.GeneratedMessage
      implements STPDeviceOrBuilder {
    // Use STPDevice.newBuilder() to construct.
    private STPDevice(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private STPDevice(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final STPDevice defaultInstance;
    public static STPDevice getDefaultInstance() {
      return defaultInstance;
    }

    public STPDevice getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private STPDevice(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              hostname_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_STPDevice_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_STPDevice_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.STPDevice.class, com.impinj.stp.StpApi.STPDevice.Builder.class);
    }

    public static com.google.protobuf.Parser<STPDevice> PARSER =
        new com.google.protobuf.AbstractParser<STPDevice>() {
      public STPDevice parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new STPDevice(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<STPDevice> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required string hostname = 1;
    public static final int HOSTNAME_FIELD_NUMBER = 1;
    private java.lang.Object hostname_;
    /**
     *
     * This must be an IP address (for now) in the format
     * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
     */
    public boolean hasHostname() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * This must be an IP address (for now) in the format
     * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
     */
    public java.lang.String getHostname() {
      java.lang.Object ref = hostname_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          hostname_ = s;
        }
        return s;
      }
    }
    /**
     *
     * This must be an IP address (for now) in the format
     * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
     */
    public com.google.protobuf.ByteString
        getHostnameBytes() {
      java.lang.Object ref = hostname_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        hostname_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      hostname_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasHostname()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getHostnameBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getHostnameBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.STPDevice parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.STPDevice parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.STPDevice parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.STPDevice parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.STPDevice parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.STPDevice parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.STPDevice parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.STPDevice parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.STPDevice parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.STPDevice parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.STPDevice prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.STPDevice}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.STPDeviceOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_STPDevice_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_STPDevice_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.STPDevice.class, com.impinj.stp.StpApi.STPDevice.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.STPDevice.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        hostname_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_STPDevice_descriptor;
      }

      public com.impinj.stp.StpApi.STPDevice getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.STPDevice.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.STPDevice build() {
        com.impinj.stp.StpApi.STPDevice result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.STPDevice buildPartial() {
        com.impinj.stp.StpApi.STPDevice result = new com.impinj.stp.StpApi.STPDevice(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.hostname_ = hostname_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.STPDevice) {
          return mergeFrom((com.impinj.stp.StpApi.STPDevice)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.STPDevice other) {
        if (other == com.impinj.stp.StpApi.STPDevice.getDefaultInstance()) return this;
        if (other.hasHostname()) {
          bitField0_ |= 0x00000001;
          hostname_ = other.hostname_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasHostname()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.STPDevice parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.STPDevice) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required string hostname = 1;
      private java.lang.Object hostname_ = "";
      /**
       *
       * This must be an IP address (for now) in the format
       * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
       */
      public boolean hasHostname() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * This must be an IP address (for now) in the format
       * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
       */
      public java.lang.String getHostname() {
        java.lang.Object ref = hostname_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          hostname_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       * This must be an IP address (for now) in the format
       * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
       */
      public com.google.protobuf.ByteString
          getHostnameBytes() {
        java.lang.Object ref = hostname_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          hostname_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       * This must be an IP address (for now) in the format
       * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
       */
      public Builder setHostname(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        hostname_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * This must be an IP address (for now) in the format
       * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
       */
      public Builder clearHostname() {
        bitField0_ = (bitField0_ & ~0x00000001);
        hostname_ = getDefaultInstance().getHostname();
        onChanged();
        return this;
      }
      /**
       *
       * This must be an IP address (for now) in the format
       * 'ddd.ddd.ddd.ddd', for example: 192.168.1.10
       */
      public Builder setHostnameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        hostname_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.STPDevice)
    }

    static {
      defaultInstance = new STPDevice(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.STPDevice)
  }

  public interface OperationResponsibilityOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes EPC_memory_mask = 1 [default = "\377\377"];
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit blocks).
     */
    boolean hasEPCMemoryMask();
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit blocks).
     */
    com.google.protobuf.ByteString getEPCMemoryMask();

    // optional bool EPC_memory_pc_word = 2 [default = true];
    /**
     *
     * Encode or verify configured PC Word
     */
    boolean hasEPCMemoryPcWord();
    /**
     *
     * Encode or verify configured PC Word
     */
    boolean getEPCMemoryPcWord();

    // optional bool TID_config_word = 18 [default = true];
    /**
     *
     * Write TID config word
     */
    boolean hasTIDConfigWord();
    /**
     *
     * Write TID config word
     */
    boolean getTIDConfigWord();

    // optional bytes user_memory_mask = 3 [default = "\377\377\377\377\377\377\377\377"];
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit  blocks)
     */
    boolean hasUserMemoryMask();
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit  blocks)
     */
    com.google.protobuf.ByteString getUserMemoryMask();

    // optional bool secure_password = 4 [default = true];
    /**
     *
     * If true, use the secured password to move tag to secure
     * state on this device.
     */
    boolean hasSecurePassword();
    /**
     *
     * If true, use the secured password to move tag to secure
     * state on this device.
     */
    boolean getSecurePassword();

    // optional bool access_password = 5 [default = true];
    /**
     *
     * Encode or verify configured 32-bit Access password
     */
    boolean hasAccessPassword();
    /**
     *
     * Encode or verify configured 32-bit Access password
     */
    boolean getAccessPassword();

    // optional bool kill_password = 6 [default = true];
    /**
     *
     * Encode or verify configured 32-bit Kill password
     */
    boolean hasKillPassword();
    /**
     *
     * Encode or verify configured 32-bit Kill password
     */
    boolean getKillPassword();

    // optional bool lock_config = 7 [default = true];
    /**
     *
     * Set or verify (read reserved memory) Lock config
     */
    boolean hasLockConfig();
    /**
     *
     * Set or verify (read reserved memory) Lock config
     */
    boolean getLockConfig();

    // optional bool blockpermalock_config = 8 [default = true];
    /**
     *
     * Set or verify (read reserved memory) BlockPermalock config
     */
    boolean hasBlockpermalockConfig();
    /**
     *
     * Set or verify (read reserved memory) BlockPermalock config
     */
    boolean getBlockpermalockConfig();

    // optional bool kill_tag = 10 [default = true];
    /**
     *
     * optional    bool                    monza_QT
     * =  9 [default = true];
     */
    boolean hasKillTag();
    /**
     *
     * optional    bool                    monza_QT
     * =  9 [default = true];
     */
    boolean getKillTag();

    // optional bool tag_specific_feature_config = 17 [default = true];
    /**
     *
     * Tag specific feature configuration for Monza 6 (and
     * possibly) later tags
     */
    boolean hasTagSpecificFeatureConfig();
    /**
     *
     * Tag specific feature configuration for Monza 6 (and
     * possibly) later tags
     */
    boolean getTagSpecificFeatureConfig();

    // optional uint32 tags_in_view_count = 11 [default = 6];
    /**
     *
     * The approximate number of tags in the field of view.  This
     * parameter is only valid In continuous mode; a report will be
     * sent when a tag is removed from a list of this size. A
     * larger number will delay reports, but allow retries if a tag
     * remains in view.
     */
    boolean hasTagsInViewCount();
    /**
     *
     * The approximate number of tags in the field of view.  This
     * parameter is only valid In continuous mode; a report will be
     * sent when a tag is removed from a list of this size. A
     * larger number will delay reports, but allow retries if a tag
     * remains in view.
     */
    int getTagsInViewCount();

    // optional uint32 tags_in_pipeline_view_count = 12 [default = 0];
    /**
     *
     * The approximate number of total tags expected in the STP
     * pipeline.  This parameter is only significant in systems
     * that have multiple devices working together to pipeline the
     * encoding process, the value should be set to exceed the
     * total number of tags between the first and last STP
     * devices. By default this is set to 0 (disabling the
     * feature).
     */
    boolean hasTagsInPipelineViewCount();
    /**
     *
     * The approximate number of total tags expected in the STP
     * pipeline.  This parameter is only significant in systems
     * that have multiple devices working together to pipeline the
     * encoding process, the value should be set to exceed the
     * total number of tags between the first and last STP
     * devices. By default this is set to 0 (disabling the
     * feature).
     */
    int getTagsInPipelineViewCount();

    // repeated .Impinj.STP.STPDevice downstream_pipeline_devices = 13;
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    java.util.List<com.impinj.stp.StpApi.STPDevice> 
        getDownstreamPipelineDevicesList();
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    com.impinj.stp.StpApi.STPDevice getDownstreamPipelineDevices(int index);
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    int getDownstreamPipelineDevicesCount();
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    java.util.List<? extends com.impinj.stp.StpApi.STPDeviceOrBuilder> 
        getDownstreamPipelineDevicesOrBuilderList();
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    com.impinj.stp.StpApi.STPDeviceOrBuilder getDownstreamPipelineDevicesOrBuilder(
        int index);

    // optional .Impinj.STP.STPDevice device_of_record = 14;
    /**
     *
     * Downstream STP device that allows non Monza encoding
     */
    boolean hasDeviceOfRecord();
    /**
     *
     * Downstream STP device that allows non Monza encoding
     */
    com.impinj.stp.StpApi.STPDevice getDeviceOfRecord();
    /**
     *
     * Downstream STP device that allows non Monza encoding
     */
    com.impinj.stp.StpApi.STPDeviceOrBuilder getDeviceOfRecordOrBuilder();

    // optional uint32 voyantic_tagsurance_test_results_cache_size = 15;
    /**
     *
     * The approximate number of tags expected in the pipeline
     * between a third party tester and the first ItemEncode
     * device.  Setting this to 0 disables the listening feature.
     * Setting this to any other value indicates that this
     * ItemEncode device should expect rf performance reports for
     * every tag it sees
     */
    boolean hasVoyanticTagsuranceTestResultsCacheSize();
    /**
     *
     * The approximate number of tags expected in the pipeline
     * between a third party tester and the first ItemEncode
     * device.  Setting this to 0 disables the listening feature.
     * Setting this to any other value indicates that this
     * ItemEncode device should expect rf performance reports for
     * every tag it sees
     */
    int getVoyanticTagsuranceTestResultsCacheSize();

    // optional .Impinj.STP.VoidTagResponsibility void_tag_responsibility = 16;
    /**
     *
     * In cases where there is voiding possible, this is how the
     * user specifies the responsibility of this device
     */
    boolean hasVoidTagResponsibility();
    /**
     *
     * In cases where there is voiding possible, this is how the
     * user specifies the responsibility of this device
     */
    com.impinj.stp.StpApi.VoidTagResponsibility getVoidTagResponsibility();
    /**
     *
     * In cases where there is voiding possible, this is how the
     * user specifies the responsibility of this device
     */
    com.impinj.stp.StpApi.VoidTagResponsibilityOrBuilder getVoidTagResponsibilityOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.OperationResponsibility}
   *
   * Define which areas of tag memory this device is responsible
   * for writing and which operations to perform.
   */
  public static final class OperationResponsibility extends
      com.google.protobuf.GeneratedMessage
      implements OperationResponsibilityOrBuilder {
    // Use OperationResponsibility.newBuilder() to construct.
    private OperationResponsibility(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OperationResponsibility(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OperationResponsibility defaultInstance;
    public static OperationResponsibility getDefaultInstance() {
      return defaultInstance;
    }

    public OperationResponsibility getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OperationResponsibility(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              ePCMemoryMask_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              ePCMemoryPcWord_ = input.readBool();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000008;
              userMemoryMask_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000010;
              securePassword_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000020;
              accessPassword_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000040;
              killPassword_ = input.readBool();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000080;
              lockConfig_ = input.readBool();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000100;
              blockpermalockConfig_ = input.readBool();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000200;
              killTag_ = input.readBool();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000800;
              tagsInViewCount_ = input.readUInt32();
              break;
            }
            case 96: {
              bitField0_ |= 0x00001000;
              tagsInPipelineViewCount_ = input.readUInt32();
              break;
            }
            case 106: {
              if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
                downstreamPipelineDevices_ = new java.util.ArrayList<com.impinj.stp.StpApi.STPDevice>();
                mutable_bitField0_ |= 0x00002000;
              }
              downstreamPipelineDevices_.add(input.readMessage(com.impinj.stp.StpApi.STPDevice.PARSER, extensionRegistry));
              break;
            }
            case 114: {
              com.impinj.stp.StpApi.STPDevice.Builder subBuilder = null;
              if (((bitField0_ & 0x00002000) == 0x00002000)) {
                subBuilder = deviceOfRecord_.toBuilder();
              }
              deviceOfRecord_ = input.readMessage(com.impinj.stp.StpApi.STPDevice.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceOfRecord_);
                deviceOfRecord_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00002000;
              break;
            }
            case 120: {
              bitField0_ |= 0x00004000;
              voyanticTagsuranceTestResultsCacheSize_ = input.readUInt32();
              break;
            }
            case 130: {
              com.impinj.stp.StpApi.VoidTagResponsibility.Builder subBuilder = null;
              if (((bitField0_ & 0x00008000) == 0x00008000)) {
                subBuilder = voidTagResponsibility_.toBuilder();
              }
              voidTagResponsibility_ = input.readMessage(com.impinj.stp.StpApi.VoidTagResponsibility.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(voidTagResponsibility_);
                voidTagResponsibility_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00008000;
              break;
            }
            case 136: {
              bitField0_ |= 0x00000400;
              tagSpecificFeatureConfig_ = input.readBool();
              break;
            }
            case 144: {
              bitField0_ |= 0x00000004;
              tIDConfigWord_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
          downstreamPipelineDevices_ = java.util.Collections.unmodifiableList(downstreamPipelineDevices_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationResponsibility_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationResponsibility_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OperationResponsibility.class, com.impinj.stp.StpApi.OperationResponsibility.Builder.class);
    }

    public static com.google.protobuf.Parser<OperationResponsibility> PARSER =
        new com.google.protobuf.AbstractParser<OperationResponsibility>() {
      public OperationResponsibility parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OperationResponsibility(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OperationResponsibility> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes EPC_memory_mask = 1 [default = "\377\377"];
    public static final int EPC_MEMORY_MASK_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString ePCMemoryMask_;
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit blocks).
     */
    public boolean hasEPCMemoryMask() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit blocks).
     */
    public com.google.protobuf.ByteString getEPCMemoryMask() {
      return ePCMemoryMask_;
    }

    // optional bool EPC_memory_pc_word = 2 [default = true];
    public static final int EPC_MEMORY_PC_WORD_FIELD_NUMBER = 2;
    private boolean ePCMemoryPcWord_;
    /**
     *
     * Encode or verify configured PC Word
     */
    public boolean hasEPCMemoryPcWord() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Encode or verify configured PC Word
     */
    public boolean getEPCMemoryPcWord() {
      return ePCMemoryPcWord_;
    }

    // optional bool TID_config_word = 18 [default = true];
    public static final int TID_CONFIG_WORD_FIELD_NUMBER = 18;
    private boolean tIDConfigWord_;
    /**
     *
     * Write TID config word
     */
    public boolean hasTIDConfigWord() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Write TID config word
     */
    public boolean getTIDConfigWord() {
      return tIDConfigWord_;
    }

    // optional bytes user_memory_mask = 3 [default = "\377\377\377\377\377\377\377\377"];
    public static final int USER_MEMORY_MASK_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString userMemoryMask_;
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit  blocks)
     */
    public boolean hasUserMemoryMask() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Hex representation of 32-bit Blocks (F = 1111 = encode 4
     * 32-bit  blocks)
     */
    public com.google.protobuf.ByteString getUserMemoryMask() {
      return userMemoryMask_;
    }

    // optional bool secure_password = 4 [default = true];
    public static final int SECURE_PASSWORD_FIELD_NUMBER = 4;
    private boolean securePassword_;
    /**
     *
     * If true, use the secured password to move tag to secure
     * state on this device.
     */
    public boolean hasSecurePassword() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * If true, use the secured password to move tag to secure
     * state on this device.
     */
    public boolean getSecurePassword() {
      return securePassword_;
    }

    // optional bool access_password = 5 [default = true];
    public static final int ACCESS_PASSWORD_FIELD_NUMBER = 5;
    private boolean accessPassword_;
    /**
     *
     * Encode or verify configured 32-bit Access password
     */
    public boolean hasAccessPassword() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * Encode or verify configured 32-bit Access password
     */
    public boolean getAccessPassword() {
      return accessPassword_;
    }

    // optional bool kill_password = 6 [default = true];
    public static final int KILL_PASSWORD_FIELD_NUMBER = 6;
    private boolean killPassword_;
    /**
     *
     * Encode or verify configured 32-bit Kill password
     */
    public boolean hasKillPassword() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     *
     * Encode or verify configured 32-bit Kill password
     */
    public boolean getKillPassword() {
      return killPassword_;
    }

    // optional bool lock_config = 7 [default = true];
    public static final int LOCK_CONFIG_FIELD_NUMBER = 7;
    private boolean lockConfig_;
    /**
     *
     * Set or verify (read reserved memory) Lock config
     */
    public boolean hasLockConfig() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     *
     * Set or verify (read reserved memory) Lock config
     */
    public boolean getLockConfig() {
      return lockConfig_;
    }

    // optional bool blockpermalock_config = 8 [default = true];
    public static final int BLOCKPERMALOCK_CONFIG_FIELD_NUMBER = 8;
    private boolean blockpermalockConfig_;
    /**
     *
     * Set or verify (read reserved memory) BlockPermalock config
     */
    public boolean hasBlockpermalockConfig() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     *
     * Set or verify (read reserved memory) BlockPermalock config
     */
    public boolean getBlockpermalockConfig() {
      return blockpermalockConfig_;
    }

    // optional bool kill_tag = 10 [default = true];
    public static final int KILL_TAG_FIELD_NUMBER = 10;
    private boolean killTag_;
    /**
     *
     * optional    bool                    monza_QT
     * =  9 [default = true];
     */
    public boolean hasKillTag() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     *
     * optional    bool                    monza_QT
     * =  9 [default = true];
     */
    public boolean getKillTag() {
      return killTag_;
    }

    // optional bool tag_specific_feature_config = 17 [default = true];
    public static final int TAG_SPECIFIC_FEATURE_CONFIG_FIELD_NUMBER = 17;
    private boolean tagSpecificFeatureConfig_;
    /**
     *
     * Tag specific feature configuration for Monza 6 (and
     * possibly) later tags
     */
    public boolean hasTagSpecificFeatureConfig() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     *
     * Tag specific feature configuration for Monza 6 (and
     * possibly) later tags
     */
    public boolean getTagSpecificFeatureConfig() {
      return tagSpecificFeatureConfig_;
    }

    // optional uint32 tags_in_view_count = 11 [default = 6];
    public static final int TAGS_IN_VIEW_COUNT_FIELD_NUMBER = 11;
    private int tagsInViewCount_;
    /**
     *
     * The approximate number of tags in the field of view.  This
     * parameter is only valid In continuous mode; a report will be
     * sent when a tag is removed from a list of this size. A
     * larger number will delay reports, but allow retries if a tag
     * remains in view.
     */
    public boolean hasTagsInViewCount() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     *
     * The approximate number of tags in the field of view.  This
     * parameter is only valid In continuous mode; a report will be
     * sent when a tag is removed from a list of this size. A
     * larger number will delay reports, but allow retries if a tag
     * remains in view.
     */
    public int getTagsInViewCount() {
      return tagsInViewCount_;
    }

    // optional uint32 tags_in_pipeline_view_count = 12 [default = 0];
    public static final int TAGS_IN_PIPELINE_VIEW_COUNT_FIELD_NUMBER = 12;
    private int tagsInPipelineViewCount_;
    /**
     *
     * The approximate number of total tags expected in the STP
     * pipeline.  This parameter is only significant in systems
     * that have multiple devices working together to pipeline the
     * encoding process, the value should be set to exceed the
     * total number of tags between the first and last STP
     * devices. By default this is set to 0 (disabling the
     * feature).
     */
    public boolean hasTagsInPipelineViewCount() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     *
     * The approximate number of total tags expected in the STP
     * pipeline.  This parameter is only significant in systems
     * that have multiple devices working together to pipeline the
     * encoding process, the value should be set to exceed the
     * total number of tags between the first and last STP
     * devices. By default this is set to 0 (disabling the
     * feature).
     */
    public int getTagsInPipelineViewCount() {
      return tagsInPipelineViewCount_;
    }

    // repeated .Impinj.STP.STPDevice downstream_pipeline_devices = 13;
    public static final int DOWNSTREAM_PIPELINE_DEVICES_FIELD_NUMBER = 13;
    private java.util.List<com.impinj.stp.StpApi.STPDevice> downstreamPipelineDevices_;
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    public java.util.List<com.impinj.stp.StpApi.STPDevice> getDownstreamPipelineDevicesList() {
      return downstreamPipelineDevices_;
    }
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    public java.util.List<? extends com.impinj.stp.StpApi.STPDeviceOrBuilder> 
        getDownstreamPipelineDevicesOrBuilderList() {
      return downstreamPipelineDevices_;
    }
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    public int getDownstreamPipelineDevicesCount() {
      return downstreamPipelineDevices_.size();
    }
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    public com.impinj.stp.StpApi.STPDevice getDownstreamPipelineDevices(int index) {
      return downstreamPipelineDevices_.get(index);
    }
    /**
     *
     * A list of downstream STP devices in pipeline which will be
     * sent  operation notifications, only necessary when
     * 'tags_in_pipeline_view_count'  is used.  The order the
     * devices will determine the order the notifications  are
     * sent.
     */
    public com.impinj.stp.StpApi.STPDeviceOrBuilder getDownstreamPipelineDevicesOrBuilder(
        int index) {
      return downstreamPipelineDevices_.get(index);
    }

    // optional .Impinj.STP.STPDevice device_of_record = 14;
    public static final int DEVICE_OF_RECORD_FIELD_NUMBER = 14;
    private com.impinj.stp.StpApi.STPDevice deviceOfRecord_;
    /**
     *
     * Downstream STP device that allows non Monza encoding
     */
    public boolean hasDeviceOfRecord() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     *
     * Downstream STP device that allows non Monza encoding
     */
    public com.impinj.stp.StpApi.STPDevice getDeviceOfRecord() {
      return deviceOfRecord_;
    }
    /**
     *
     * Downstream STP device that allows non Monza encoding
     */
    public com.impinj.stp.StpApi.STPDeviceOrBuilder getDeviceOfRecordOrBuilder() {
      return deviceOfRecord_;
    }

    // optional uint32 voyantic_tagsurance_test_results_cache_size = 15;
    public static final int VOYANTIC_TAGSURANCE_TEST_RESULTS_CACHE_SIZE_FIELD_NUMBER = 15;
    private int voyanticTagsuranceTestResultsCacheSize_;
    /**
     *
     * The approximate number of tags expected in the pipeline
     * between a third party tester and the first ItemEncode
     * device.  Setting this to 0 disables the listening feature.
     * Setting this to any other value indicates that this
     * ItemEncode device should expect rf performance reports for
     * every tag it sees
     */
    public boolean hasVoyanticTagsuranceTestResultsCacheSize() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     *
     * The approximate number of tags expected in the pipeline
     * between a third party tester and the first ItemEncode
     * device.  Setting this to 0 disables the listening feature.
     * Setting this to any other value indicates that this
     * ItemEncode device should expect rf performance reports for
     * every tag it sees
     */
    public int getVoyanticTagsuranceTestResultsCacheSize() {
      return voyanticTagsuranceTestResultsCacheSize_;
    }

    // optional .Impinj.STP.VoidTagResponsibility void_tag_responsibility = 16;
    public static final int VOID_TAG_RESPONSIBILITY_FIELD_NUMBER = 16;
    private com.impinj.stp.StpApi.VoidTagResponsibility voidTagResponsibility_;
    /**
     *
     * In cases where there is voiding possible, this is how the
     * user specifies the responsibility of this device
     */
    public boolean hasVoidTagResponsibility() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     *
     * In cases where there is voiding possible, this is how the
     * user specifies the responsibility of this device
     */
    public com.impinj.stp.StpApi.VoidTagResponsibility getVoidTagResponsibility() {
      return voidTagResponsibility_;
    }
    /**
     *
     * In cases where there is voiding possible, this is how the
     * user specifies the responsibility of this device
     */
    public com.impinj.stp.StpApi.VoidTagResponsibilityOrBuilder getVoidTagResponsibilityOrBuilder() {
      return voidTagResponsibility_;
    }

    private void initFields() {
      ePCMemoryMask_ = com.google.protobuf.Internal.bytesDefaultValue("\377\377");
      ePCMemoryPcWord_ = true;
      tIDConfigWord_ = true;
      userMemoryMask_ = com.google.protobuf.Internal.bytesDefaultValue("\377\377\377\377\377\377\377\377");
      securePassword_ = true;
      accessPassword_ = true;
      killPassword_ = true;
      lockConfig_ = true;
      blockpermalockConfig_ = true;
      killTag_ = true;
      tagSpecificFeatureConfig_ = true;
      tagsInViewCount_ = 6;
      tagsInPipelineViewCount_ = 0;
      downstreamPipelineDevices_ = java.util.Collections.emptyList();
      deviceOfRecord_ = com.impinj.stp.StpApi.STPDevice.getDefaultInstance();
      voyanticTagsuranceTestResultsCacheSize_ = 0;
      voidTagResponsibility_ = com.impinj.stp.StpApi.VoidTagResponsibility.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      for (int i = 0; i < getDownstreamPipelineDevicesCount(); i++) {
        if (!getDownstreamPipelineDevices(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasDeviceOfRecord()) {
        if (!getDeviceOfRecord().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, ePCMemoryMask_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, ePCMemoryPcWord_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(3, userMemoryMask_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(4, securePassword_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(5, accessPassword_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBool(6, killPassword_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBool(7, lockConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBool(8, blockpermalockConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBool(10, killTag_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeUInt32(11, tagsInViewCount_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeUInt32(12, tagsInPipelineViewCount_);
      }
      for (int i = 0; i < downstreamPipelineDevices_.size(); i++) {
        output.writeMessage(13, downstreamPipelineDevices_.get(i));
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeMessage(14, deviceOfRecord_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeUInt32(15, voyanticTagsuranceTestResultsCacheSize_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeMessage(16, voidTagResponsibility_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBool(17, tagSpecificFeatureConfig_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(18, tIDConfigWord_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, ePCMemoryMask_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, ePCMemoryPcWord_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, userMemoryMask_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, securePassword_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, accessPassword_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, killPassword_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, lockConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, blockpermalockConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, killTag_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(11, tagsInViewCount_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(12, tagsInPipelineViewCount_);
      }
      for (int i = 0; i < downstreamPipelineDevices_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, downstreamPipelineDevices_.get(i));
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, deviceOfRecord_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(15, voyanticTagsuranceTestResultsCacheSize_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, voidTagResponsibility_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(17, tagSpecificFeatureConfig_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(18, tIDConfigWord_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationResponsibility parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OperationResponsibility prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OperationResponsibility}
     *
     * Define which areas of tag memory this device is responsible
     * for writing and which operations to perform.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OperationResponsibilityOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationResponsibility_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationResponsibility_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OperationResponsibility.class, com.impinj.stp.StpApi.OperationResponsibility.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OperationResponsibility.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDownstreamPipelineDevicesFieldBuilder();
          getDeviceOfRecordFieldBuilder();
          getVoidTagResponsibilityFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        ePCMemoryMask_ = com.google.protobuf.Internal.bytesDefaultValue("\377\377");
        bitField0_ = (bitField0_ & ~0x00000001);
        ePCMemoryPcWord_ = true;
        bitField0_ = (bitField0_ & ~0x00000002);
        tIDConfigWord_ = true;
        bitField0_ = (bitField0_ & ~0x00000004);
        userMemoryMask_ = com.google.protobuf.Internal.bytesDefaultValue("\377\377\377\377\377\377\377\377");
        bitField0_ = (bitField0_ & ~0x00000008);
        securePassword_ = true;
        bitField0_ = (bitField0_ & ~0x00000010);
        accessPassword_ = true;
        bitField0_ = (bitField0_ & ~0x00000020);
        killPassword_ = true;
        bitField0_ = (bitField0_ & ~0x00000040);
        lockConfig_ = true;
        bitField0_ = (bitField0_ & ~0x00000080);
        blockpermalockConfig_ = true;
        bitField0_ = (bitField0_ & ~0x00000100);
        killTag_ = true;
        bitField0_ = (bitField0_ & ~0x00000200);
        tagSpecificFeatureConfig_ = true;
        bitField0_ = (bitField0_ & ~0x00000400);
        tagsInViewCount_ = 6;
        bitField0_ = (bitField0_ & ~0x00000800);
        tagsInPipelineViewCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00001000);
        if (downstreamPipelineDevicesBuilder_ == null) {
          downstreamPipelineDevices_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          downstreamPipelineDevicesBuilder_.clear();
        }
        if (deviceOfRecordBuilder_ == null) {
          deviceOfRecord_ = com.impinj.stp.StpApi.STPDevice.getDefaultInstance();
        } else {
          deviceOfRecordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        voyanticTagsuranceTestResultsCacheSize_ = 0;
        bitField0_ = (bitField0_ & ~0x00008000);
        if (voidTagResponsibilityBuilder_ == null) {
          voidTagResponsibility_ = com.impinj.stp.StpApi.VoidTagResponsibility.getDefaultInstance();
        } else {
          voidTagResponsibilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationResponsibility_descriptor;
      }

      public com.impinj.stp.StpApi.OperationResponsibility getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OperationResponsibility.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OperationResponsibility build() {
        com.impinj.stp.StpApi.OperationResponsibility result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OperationResponsibility buildPartial() {
        com.impinj.stp.StpApi.OperationResponsibility result = new com.impinj.stp.StpApi.OperationResponsibility(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.ePCMemoryMask_ = ePCMemoryMask_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.ePCMemoryPcWord_ = ePCMemoryPcWord_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.tIDConfigWord_ = tIDConfigWord_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.userMemoryMask_ = userMemoryMask_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.securePassword_ = securePassword_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.accessPassword_ = accessPassword_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.killPassword_ = killPassword_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.lockConfig_ = lockConfig_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.blockpermalockConfig_ = blockpermalockConfig_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.killTag_ = killTag_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.tagSpecificFeatureConfig_ = tagSpecificFeatureConfig_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.tagsInViewCount_ = tagsInViewCount_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.tagsInPipelineViewCount_ = tagsInPipelineViewCount_;
        if (downstreamPipelineDevicesBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000)) {
            downstreamPipelineDevices_ = java.util.Collections.unmodifiableList(downstreamPipelineDevices_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.downstreamPipelineDevices_ = downstreamPipelineDevices_;
        } else {
          result.downstreamPipelineDevices_ = downstreamPipelineDevicesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00002000;
        }
        if (deviceOfRecordBuilder_ == null) {
          result.deviceOfRecord_ = deviceOfRecord_;
        } else {
          result.deviceOfRecord_ = deviceOfRecordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.voyanticTagsuranceTestResultsCacheSize_ = voyanticTagsuranceTestResultsCacheSize_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00008000;
        }
        if (voidTagResponsibilityBuilder_ == null) {
          result.voidTagResponsibility_ = voidTagResponsibility_;
        } else {
          result.voidTagResponsibility_ = voidTagResponsibilityBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OperationResponsibility) {
          return mergeFrom((com.impinj.stp.StpApi.OperationResponsibility)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OperationResponsibility other) {
        if (other == com.impinj.stp.StpApi.OperationResponsibility.getDefaultInstance()) return this;
        if (other.hasEPCMemoryMask()) {
          setEPCMemoryMask(other.getEPCMemoryMask());
        }
        if (other.hasEPCMemoryPcWord()) {
          setEPCMemoryPcWord(other.getEPCMemoryPcWord());
        }
        if (other.hasTIDConfigWord()) {
          setTIDConfigWord(other.getTIDConfigWord());
        }
        if (other.hasUserMemoryMask()) {
          setUserMemoryMask(other.getUserMemoryMask());
        }
        if (other.hasSecurePassword()) {
          setSecurePassword(other.getSecurePassword());
        }
        if (other.hasAccessPassword()) {
          setAccessPassword(other.getAccessPassword());
        }
        if (other.hasKillPassword()) {
          setKillPassword(other.getKillPassword());
        }
        if (other.hasLockConfig()) {
          setLockConfig(other.getLockConfig());
        }
        if (other.hasBlockpermalockConfig()) {
          setBlockpermalockConfig(other.getBlockpermalockConfig());
        }
        if (other.hasKillTag()) {
          setKillTag(other.getKillTag());
        }
        if (other.hasTagSpecificFeatureConfig()) {
          setTagSpecificFeatureConfig(other.getTagSpecificFeatureConfig());
        }
        if (other.hasTagsInViewCount()) {
          setTagsInViewCount(other.getTagsInViewCount());
        }
        if (other.hasTagsInPipelineViewCount()) {
          setTagsInPipelineViewCount(other.getTagsInPipelineViewCount());
        }
        if (downstreamPipelineDevicesBuilder_ == null) {
          if (!other.downstreamPipelineDevices_.isEmpty()) {
            if (downstreamPipelineDevices_.isEmpty()) {
              downstreamPipelineDevices_ = other.downstreamPipelineDevices_;
              bitField0_ = (bitField0_ & ~0x00002000);
            } else {
              ensureDownstreamPipelineDevicesIsMutable();
              downstreamPipelineDevices_.addAll(other.downstreamPipelineDevices_);
            }
            onChanged();
          }
        } else {
          if (!other.downstreamPipelineDevices_.isEmpty()) {
            if (downstreamPipelineDevicesBuilder_.isEmpty()) {
              downstreamPipelineDevicesBuilder_.dispose();
              downstreamPipelineDevicesBuilder_ = null;
              downstreamPipelineDevices_ = other.downstreamPipelineDevices_;
              bitField0_ = (bitField0_ & ~0x00002000);
              downstreamPipelineDevicesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDownstreamPipelineDevicesFieldBuilder() : null;
            } else {
              downstreamPipelineDevicesBuilder_.addAllMessages(other.downstreamPipelineDevices_);
            }
          }
        }
        if (other.hasDeviceOfRecord()) {
          mergeDeviceOfRecord(other.getDeviceOfRecord());
        }
        if (other.hasVoyanticTagsuranceTestResultsCacheSize()) {
          setVoyanticTagsuranceTestResultsCacheSize(other.getVoyanticTagsuranceTestResultsCacheSize());
        }
        if (other.hasVoidTagResponsibility()) {
          mergeVoidTagResponsibility(other.getVoidTagResponsibility());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getDownstreamPipelineDevicesCount(); i++) {
          if (!getDownstreamPipelineDevices(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasDeviceOfRecord()) {
          if (!getDeviceOfRecord().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OperationResponsibility parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OperationResponsibility) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes EPC_memory_mask = 1 [default = "\377\377"];
      private com.google.protobuf.ByteString ePCMemoryMask_ = com.google.protobuf.Internal.bytesDefaultValue("\377\377");
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit blocks).
       */
      public boolean hasEPCMemoryMask() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit blocks).
       */
      public com.google.protobuf.ByteString getEPCMemoryMask() {
        return ePCMemoryMask_;
      }
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit blocks).
       */
      public Builder setEPCMemoryMask(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        ePCMemoryMask_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit blocks).
       */
      public Builder clearEPCMemoryMask() {
        bitField0_ = (bitField0_ & ~0x00000001);
        ePCMemoryMask_ = getDefaultInstance().getEPCMemoryMask();
        onChanged();
        return this;
      }

      // optional bool EPC_memory_pc_word = 2 [default = true];
      private boolean ePCMemoryPcWord_ = true;
      /**
       *
       * Encode or verify configured PC Word
       */
      public boolean hasEPCMemoryPcWord() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Encode or verify configured PC Word
       */
      public boolean getEPCMemoryPcWord() {
        return ePCMemoryPcWord_;
      }
      /**
       *
       * Encode or verify configured PC Word
       */
      public Builder setEPCMemoryPcWord(boolean value) {
        bitField0_ |= 0x00000002;
        ePCMemoryPcWord_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Encode or verify configured PC Word
       */
      public Builder clearEPCMemoryPcWord() {
        bitField0_ = (bitField0_ & ~0x00000002);
        ePCMemoryPcWord_ = true;
        onChanged();
        return this;
      }

      // optional bool TID_config_word = 18 [default = true];
      private boolean tIDConfigWord_ = true;
      /**
       *
       * Write TID config word
       */
      public boolean hasTIDConfigWord() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Write TID config word
       */
      public boolean getTIDConfigWord() {
        return tIDConfigWord_;
      }
      /**
       *
       * Write TID config word
       */
      public Builder setTIDConfigWord(boolean value) {
        bitField0_ |= 0x00000004;
        tIDConfigWord_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Write TID config word
       */
      public Builder clearTIDConfigWord() {
        bitField0_ = (bitField0_ & ~0x00000004);
        tIDConfigWord_ = true;
        onChanged();
        return this;
      }

      // optional bytes user_memory_mask = 3 [default = "\377\377\377\377\377\377\377\377"];
      private com.google.protobuf.ByteString userMemoryMask_ = com.google.protobuf.Internal.bytesDefaultValue("\377\377\377\377\377\377\377\377");
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit  blocks)
       */
      public boolean hasUserMemoryMask() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit  blocks)
       */
      public com.google.protobuf.ByteString getUserMemoryMask() {
        return userMemoryMask_;
      }
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit  blocks)
       */
      public Builder setUserMemoryMask(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        userMemoryMask_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Hex representation of 32-bit Blocks (F = 1111 = encode 4
       * 32-bit  blocks)
       */
      public Builder clearUserMemoryMask() {
        bitField0_ = (bitField0_ & ~0x00000008);
        userMemoryMask_ = getDefaultInstance().getUserMemoryMask();
        onChanged();
        return this;
      }

      // optional bool secure_password = 4 [default = true];
      private boolean securePassword_ = true;
      /**
       *
       * If true, use the secured password to move tag to secure
       * state on this device.
       */
      public boolean hasSecurePassword() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * If true, use the secured password to move tag to secure
       * state on this device.
       */
      public boolean getSecurePassword() {
        return securePassword_;
      }
      /**
       *
       * If true, use the secured password to move tag to secure
       * state on this device.
       */
      public Builder setSecurePassword(boolean value) {
        bitField0_ |= 0x00000010;
        securePassword_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * If true, use the secured password to move tag to secure
       * state on this device.
       */
      public Builder clearSecurePassword() {
        bitField0_ = (bitField0_ & ~0x00000010);
        securePassword_ = true;
        onChanged();
        return this;
      }

      // optional bool access_password = 5 [default = true];
      private boolean accessPassword_ = true;
      /**
       *
       * Encode or verify configured 32-bit Access password
       */
      public boolean hasAccessPassword() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       *
       * Encode or verify configured 32-bit Access password
       */
      public boolean getAccessPassword() {
        return accessPassword_;
      }
      /**
       *
       * Encode or verify configured 32-bit Access password
       */
      public Builder setAccessPassword(boolean value) {
        bitField0_ |= 0x00000020;
        accessPassword_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Encode or verify configured 32-bit Access password
       */
      public Builder clearAccessPassword() {
        bitField0_ = (bitField0_ & ~0x00000020);
        accessPassword_ = true;
        onChanged();
        return this;
      }

      // optional bool kill_password = 6 [default = true];
      private boolean killPassword_ = true;
      /**
       *
       * Encode or verify configured 32-bit Kill password
       */
      public boolean hasKillPassword() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       *
       * Encode or verify configured 32-bit Kill password
       */
      public boolean getKillPassword() {
        return killPassword_;
      }
      /**
       *
       * Encode or verify configured 32-bit Kill password
       */
      public Builder setKillPassword(boolean value) {
        bitField0_ |= 0x00000040;
        killPassword_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Encode or verify configured 32-bit Kill password
       */
      public Builder clearKillPassword() {
        bitField0_ = (bitField0_ & ~0x00000040);
        killPassword_ = true;
        onChanged();
        return this;
      }

      // optional bool lock_config = 7 [default = true];
      private boolean lockConfig_ = true;
      /**
       *
       * Set or verify (read reserved memory) Lock config
       */
      public boolean hasLockConfig() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       *
       * Set or verify (read reserved memory) Lock config
       */
      public boolean getLockConfig() {
        return lockConfig_;
      }
      /**
       *
       * Set or verify (read reserved memory) Lock config
       */
      public Builder setLockConfig(boolean value) {
        bitField0_ |= 0x00000080;
        lockConfig_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Set or verify (read reserved memory) Lock config
       */
      public Builder clearLockConfig() {
        bitField0_ = (bitField0_ & ~0x00000080);
        lockConfig_ = true;
        onChanged();
        return this;
      }

      // optional bool blockpermalock_config = 8 [default = true];
      private boolean blockpermalockConfig_ = true;
      /**
       *
       * Set or verify (read reserved memory) BlockPermalock config
       */
      public boolean hasBlockpermalockConfig() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       *
       * Set or verify (read reserved memory) BlockPermalock config
       */
      public boolean getBlockpermalockConfig() {
        return blockpermalockConfig_;
      }
      /**
       *
       * Set or verify (read reserved memory) BlockPermalock config
       */
      public Builder setBlockpermalockConfig(boolean value) {
        bitField0_ |= 0x00000100;
        blockpermalockConfig_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Set or verify (read reserved memory) BlockPermalock config
       */
      public Builder clearBlockpermalockConfig() {
        bitField0_ = (bitField0_ & ~0x00000100);
        blockpermalockConfig_ = true;
        onChanged();
        return this;
      }

      // optional bool kill_tag = 10 [default = true];
      private boolean killTag_ = true;
      /**
       *
       * optional    bool                    monza_QT
       * =  9 [default = true];
       */
      public boolean hasKillTag() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       *
       * optional    bool                    monza_QT
       * =  9 [default = true];
       */
      public boolean getKillTag() {
        return killTag_;
      }
      /**
       *
       * optional    bool                    monza_QT
       * =  9 [default = true];
       */
      public Builder setKillTag(boolean value) {
        bitField0_ |= 0x00000200;
        killTag_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * optional    bool                    monza_QT
       * =  9 [default = true];
       */
      public Builder clearKillTag() {
        bitField0_ = (bitField0_ & ~0x00000200);
        killTag_ = true;
        onChanged();
        return this;
      }

      // optional bool tag_specific_feature_config = 17 [default = true];
      private boolean tagSpecificFeatureConfig_ = true;
      /**
       *
       * Tag specific feature configuration for Monza 6 (and
       * possibly) later tags
       */
      public boolean hasTagSpecificFeatureConfig() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       *
       * Tag specific feature configuration for Monza 6 (and
       * possibly) later tags
       */
      public boolean getTagSpecificFeatureConfig() {
        return tagSpecificFeatureConfig_;
      }
      /**
       *
       * Tag specific feature configuration for Monza 6 (and
       * possibly) later tags
       */
      public Builder setTagSpecificFeatureConfig(boolean value) {
        bitField0_ |= 0x00000400;
        tagSpecificFeatureConfig_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Tag specific feature configuration for Monza 6 (and
       * possibly) later tags
       */
      public Builder clearTagSpecificFeatureConfig() {
        bitField0_ = (bitField0_ & ~0x00000400);
        tagSpecificFeatureConfig_ = true;
        onChanged();
        return this;
      }

      // optional uint32 tags_in_view_count = 11 [default = 6];
      private int tagsInViewCount_ = 6;
      /**
       *
       * The approximate number of tags in the field of view.  This
       * parameter is only valid In continuous mode; a report will be
       * sent when a tag is removed from a list of this size. A
       * larger number will delay reports, but allow retries if a tag
       * remains in view.
       */
      public boolean hasTagsInViewCount() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       *
       * The approximate number of tags in the field of view.  This
       * parameter is only valid In continuous mode; a report will be
       * sent when a tag is removed from a list of this size. A
       * larger number will delay reports, but allow retries if a tag
       * remains in view.
       */
      public int getTagsInViewCount() {
        return tagsInViewCount_;
      }
      /**
       *
       * The approximate number of tags in the field of view.  This
       * parameter is only valid In continuous mode; a report will be
       * sent when a tag is removed from a list of this size. A
       * larger number will delay reports, but allow retries if a tag
       * remains in view.
       */
      public Builder setTagsInViewCount(int value) {
        bitField0_ |= 0x00000800;
        tagsInViewCount_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The approximate number of tags in the field of view.  This
       * parameter is only valid In continuous mode; a report will be
       * sent when a tag is removed from a list of this size. A
       * larger number will delay reports, but allow retries if a tag
       * remains in view.
       */
      public Builder clearTagsInViewCount() {
        bitField0_ = (bitField0_ & ~0x00000800);
        tagsInViewCount_ = 6;
        onChanged();
        return this;
      }

      // optional uint32 tags_in_pipeline_view_count = 12 [default = 0];
      private int tagsInPipelineViewCount_ ;
      /**
       *
       * The approximate number of total tags expected in the STP
       * pipeline.  This parameter is only significant in systems
       * that have multiple devices working together to pipeline the
       * encoding process, the value should be set to exceed the
       * total number of tags between the first and last STP
       * devices. By default this is set to 0 (disabling the
       * feature).
       */
      public boolean hasTagsInPipelineViewCount() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       *
       * The approximate number of total tags expected in the STP
       * pipeline.  This parameter is only significant in systems
       * that have multiple devices working together to pipeline the
       * encoding process, the value should be set to exceed the
       * total number of tags between the first and last STP
       * devices. By default this is set to 0 (disabling the
       * feature).
       */
      public int getTagsInPipelineViewCount() {
        return tagsInPipelineViewCount_;
      }
      /**
       *
       * The approximate number of total tags expected in the STP
       * pipeline.  This parameter is only significant in systems
       * that have multiple devices working together to pipeline the
       * encoding process, the value should be set to exceed the
       * total number of tags between the first and last STP
       * devices. By default this is set to 0 (disabling the
       * feature).
       */
      public Builder setTagsInPipelineViewCount(int value) {
        bitField0_ |= 0x00001000;
        tagsInPipelineViewCount_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The approximate number of total tags expected in the STP
       * pipeline.  This parameter is only significant in systems
       * that have multiple devices working together to pipeline the
       * encoding process, the value should be set to exceed the
       * total number of tags between the first and last STP
       * devices. By default this is set to 0 (disabling the
       * feature).
       */
      public Builder clearTagsInPipelineViewCount() {
        bitField0_ = (bitField0_ & ~0x00001000);
        tagsInPipelineViewCount_ = 0;
        onChanged();
        return this;
      }

      // repeated .Impinj.STP.STPDevice downstream_pipeline_devices = 13;
      private java.util.List<com.impinj.stp.StpApi.STPDevice> downstreamPipelineDevices_ =
        java.util.Collections.emptyList();
      private void ensureDownstreamPipelineDevicesIsMutable() {
        if (!((bitField0_ & 0x00002000) == 0x00002000)) {
          downstreamPipelineDevices_ = new java.util.ArrayList<com.impinj.stp.StpApi.STPDevice>(downstreamPipelineDevices_);
          bitField0_ |= 0x00002000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.STPDevice, com.impinj.stp.StpApi.STPDevice.Builder, com.impinj.stp.StpApi.STPDeviceOrBuilder> downstreamPipelineDevicesBuilder_;

      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public java.util.List<com.impinj.stp.StpApi.STPDevice> getDownstreamPipelineDevicesList() {
        if (downstreamPipelineDevicesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(downstreamPipelineDevices_);
        } else {
          return downstreamPipelineDevicesBuilder_.getMessageList();
        }
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public int getDownstreamPipelineDevicesCount() {
        if (downstreamPipelineDevicesBuilder_ == null) {
          return downstreamPipelineDevices_.size();
        } else {
          return downstreamPipelineDevicesBuilder_.getCount();
        }
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public com.impinj.stp.StpApi.STPDevice getDownstreamPipelineDevices(int index) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          return downstreamPipelineDevices_.get(index);
        } else {
          return downstreamPipelineDevicesBuilder_.getMessage(index);
        }
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder setDownstreamPipelineDevices(
          int index, com.impinj.stp.StpApi.STPDevice value) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDownstreamPipelineDevicesIsMutable();
          downstreamPipelineDevices_.set(index, value);
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder setDownstreamPipelineDevices(
          int index, com.impinj.stp.StpApi.STPDevice.Builder builderForValue) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          ensureDownstreamPipelineDevicesIsMutable();
          downstreamPipelineDevices_.set(index, builderForValue.build());
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder addDownstreamPipelineDevices(com.impinj.stp.StpApi.STPDevice value) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDownstreamPipelineDevicesIsMutable();
          downstreamPipelineDevices_.add(value);
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder addDownstreamPipelineDevices(
          int index, com.impinj.stp.StpApi.STPDevice value) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDownstreamPipelineDevicesIsMutable();
          downstreamPipelineDevices_.add(index, value);
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder addDownstreamPipelineDevices(
          com.impinj.stp.StpApi.STPDevice.Builder builderForValue) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          ensureDownstreamPipelineDevicesIsMutable();
          downstreamPipelineDevices_.add(builderForValue.build());
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder addDownstreamPipelineDevices(
          int index, com.impinj.stp.StpApi.STPDevice.Builder builderForValue) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          ensureDownstreamPipelineDevicesIsMutable();
          downstreamPipelineDevices_.add(index, builderForValue.build());
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder addAllDownstreamPipelineDevices(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.STPDevice> values) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          ensureDownstreamPipelineDevicesIsMutable();
          super.addAll(values, downstreamPipelineDevices_);
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder clearDownstreamPipelineDevices() {
        if (downstreamPipelineDevicesBuilder_ == null) {
          downstreamPipelineDevices_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.clear();
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public Builder removeDownstreamPipelineDevices(int index) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          ensureDownstreamPipelineDevicesIsMutable();
          downstreamPipelineDevices_.remove(index);
          onChanged();
        } else {
          downstreamPipelineDevicesBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public com.impinj.stp.StpApi.STPDevice.Builder getDownstreamPipelineDevicesBuilder(
          int index) {
        return getDownstreamPipelineDevicesFieldBuilder().getBuilder(index);
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public com.impinj.stp.StpApi.STPDeviceOrBuilder getDownstreamPipelineDevicesOrBuilder(
          int index) {
        if (downstreamPipelineDevicesBuilder_ == null) {
          return downstreamPipelineDevices_.get(index);  } else {
          return downstreamPipelineDevicesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public java.util.List<? extends com.impinj.stp.StpApi.STPDeviceOrBuilder> 
           getDownstreamPipelineDevicesOrBuilderList() {
        if (downstreamPipelineDevicesBuilder_ != null) {
          return downstreamPipelineDevicesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(downstreamPipelineDevices_);
        }
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public com.impinj.stp.StpApi.STPDevice.Builder addDownstreamPipelineDevicesBuilder() {
        return getDownstreamPipelineDevicesFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.STPDevice.getDefaultInstance());
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public com.impinj.stp.StpApi.STPDevice.Builder addDownstreamPipelineDevicesBuilder(
          int index) {
        return getDownstreamPipelineDevicesFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.STPDevice.getDefaultInstance());
      }
      /**
       *
       * A list of downstream STP devices in pipeline which will be
       * sent  operation notifications, only necessary when
       * 'tags_in_pipeline_view_count'  is used.  The order the
       * devices will determine the order the notifications  are
       * sent.
       */
      public java.util.List<com.impinj.stp.StpApi.STPDevice.Builder> 
           getDownstreamPipelineDevicesBuilderList() {
        return getDownstreamPipelineDevicesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.STPDevice, com.impinj.stp.StpApi.STPDevice.Builder, com.impinj.stp.StpApi.STPDeviceOrBuilder> 
          getDownstreamPipelineDevicesFieldBuilder() {
        if (downstreamPipelineDevicesBuilder_ == null) {
          downstreamPipelineDevicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.STPDevice, com.impinj.stp.StpApi.STPDevice.Builder, com.impinj.stp.StpApi.STPDeviceOrBuilder>(
                  downstreamPipelineDevices_,
                  ((bitField0_ & 0x00002000) == 0x00002000),
                  getParentForChildren(),
                  isClean());
          downstreamPipelineDevices_ = null;
        }
        return downstreamPipelineDevicesBuilder_;
      }

      // optional .Impinj.STP.STPDevice device_of_record = 14;
      private com.impinj.stp.StpApi.STPDevice deviceOfRecord_ = com.impinj.stp.StpApi.STPDevice.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.STPDevice, com.impinj.stp.StpApi.STPDevice.Builder, com.impinj.stp.StpApi.STPDeviceOrBuilder> deviceOfRecordBuilder_;
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public boolean hasDeviceOfRecord() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public com.impinj.stp.StpApi.STPDevice getDeviceOfRecord() {
        if (deviceOfRecordBuilder_ == null) {
          return deviceOfRecord_;
        } else {
          return deviceOfRecordBuilder_.getMessage();
        }
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public Builder setDeviceOfRecord(com.impinj.stp.StpApi.STPDevice value) {
        if (deviceOfRecordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceOfRecord_ = value;
          onChanged();
        } else {
          deviceOfRecordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public Builder setDeviceOfRecord(
          com.impinj.stp.StpApi.STPDevice.Builder builderForValue) {
        if (deviceOfRecordBuilder_ == null) {
          deviceOfRecord_ = builderForValue.build();
          onChanged();
        } else {
          deviceOfRecordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public Builder mergeDeviceOfRecord(com.impinj.stp.StpApi.STPDevice value) {
        if (deviceOfRecordBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000) &&
              deviceOfRecord_ != com.impinj.stp.StpApi.STPDevice.getDefaultInstance()) {
            deviceOfRecord_ =
              com.impinj.stp.StpApi.STPDevice.newBuilder(deviceOfRecord_).mergeFrom(value).buildPartial();
          } else {
            deviceOfRecord_ = value;
          }
          onChanged();
        } else {
          deviceOfRecordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public Builder clearDeviceOfRecord() {
        if (deviceOfRecordBuilder_ == null) {
          deviceOfRecord_ = com.impinj.stp.StpApi.STPDevice.getDefaultInstance();
          onChanged();
        } else {
          deviceOfRecordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        return this;
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public com.impinj.stp.StpApi.STPDevice.Builder getDeviceOfRecordBuilder() {
        bitField0_ |= 0x00004000;
        onChanged();
        return getDeviceOfRecordFieldBuilder().getBuilder();
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      public com.impinj.stp.StpApi.STPDeviceOrBuilder getDeviceOfRecordOrBuilder() {
        if (deviceOfRecordBuilder_ != null) {
          return deviceOfRecordBuilder_.getMessageOrBuilder();
        } else {
          return deviceOfRecord_;
        }
      }
      /**
       *
       * Downstream STP device that allows non Monza encoding
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.STPDevice, com.impinj.stp.StpApi.STPDevice.Builder, com.impinj.stp.StpApi.STPDeviceOrBuilder> 
          getDeviceOfRecordFieldBuilder() {
        if (deviceOfRecordBuilder_ == null) {
          deviceOfRecordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.STPDevice, com.impinj.stp.StpApi.STPDevice.Builder, com.impinj.stp.StpApi.STPDeviceOrBuilder>(
                  deviceOfRecord_,
                  getParentForChildren(),
                  isClean());
          deviceOfRecord_ = null;
        }
        return deviceOfRecordBuilder_;
      }

      // optional uint32 voyantic_tagsurance_test_results_cache_size = 15;
      private int voyanticTagsuranceTestResultsCacheSize_ ;
      /**
       *
       * The approximate number of tags expected in the pipeline
       * between a third party tester and the first ItemEncode
       * device.  Setting this to 0 disables the listening feature.
       * Setting this to any other value indicates that this
       * ItemEncode device should expect rf performance reports for
       * every tag it sees
       */
      public boolean hasVoyanticTagsuranceTestResultsCacheSize() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       *
       * The approximate number of tags expected in the pipeline
       * between a third party tester and the first ItemEncode
       * device.  Setting this to 0 disables the listening feature.
       * Setting this to any other value indicates that this
       * ItemEncode device should expect rf performance reports for
       * every tag it sees
       */
      public int getVoyanticTagsuranceTestResultsCacheSize() {
        return voyanticTagsuranceTestResultsCacheSize_;
      }
      /**
       *
       * The approximate number of tags expected in the pipeline
       * between a third party tester and the first ItemEncode
       * device.  Setting this to 0 disables the listening feature.
       * Setting this to any other value indicates that this
       * ItemEncode device should expect rf performance reports for
       * every tag it sees
       */
      public Builder setVoyanticTagsuranceTestResultsCacheSize(int value) {
        bitField0_ |= 0x00008000;
        voyanticTagsuranceTestResultsCacheSize_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The approximate number of tags expected in the pipeline
       * between a third party tester and the first ItemEncode
       * device.  Setting this to 0 disables the listening feature.
       * Setting this to any other value indicates that this
       * ItemEncode device should expect rf performance reports for
       * every tag it sees
       */
      public Builder clearVoyanticTagsuranceTestResultsCacheSize() {
        bitField0_ = (bitField0_ & ~0x00008000);
        voyanticTagsuranceTestResultsCacheSize_ = 0;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.VoidTagResponsibility void_tag_responsibility = 16;
      private com.impinj.stp.StpApi.VoidTagResponsibility voidTagResponsibility_ = com.impinj.stp.StpApi.VoidTagResponsibility.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.VoidTagResponsibility, com.impinj.stp.StpApi.VoidTagResponsibility.Builder, com.impinj.stp.StpApi.VoidTagResponsibilityOrBuilder> voidTagResponsibilityBuilder_;
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public boolean hasVoidTagResponsibility() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public com.impinj.stp.StpApi.VoidTagResponsibility getVoidTagResponsibility() {
        if (voidTagResponsibilityBuilder_ == null) {
          return voidTagResponsibility_;
        } else {
          return voidTagResponsibilityBuilder_.getMessage();
        }
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public Builder setVoidTagResponsibility(com.impinj.stp.StpApi.VoidTagResponsibility value) {
        if (voidTagResponsibilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          voidTagResponsibility_ = value;
          onChanged();
        } else {
          voidTagResponsibilityBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public Builder setVoidTagResponsibility(
          com.impinj.stp.StpApi.VoidTagResponsibility.Builder builderForValue) {
        if (voidTagResponsibilityBuilder_ == null) {
          voidTagResponsibility_ = builderForValue.build();
          onChanged();
        } else {
          voidTagResponsibilityBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public Builder mergeVoidTagResponsibility(com.impinj.stp.StpApi.VoidTagResponsibility value) {
        if (voidTagResponsibilityBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000) &&
              voidTagResponsibility_ != com.impinj.stp.StpApi.VoidTagResponsibility.getDefaultInstance()) {
            voidTagResponsibility_ =
              com.impinj.stp.StpApi.VoidTagResponsibility.newBuilder(voidTagResponsibility_).mergeFrom(value).buildPartial();
          } else {
            voidTagResponsibility_ = value;
          }
          onChanged();
        } else {
          voidTagResponsibilityBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public Builder clearVoidTagResponsibility() {
        if (voidTagResponsibilityBuilder_ == null) {
          voidTagResponsibility_ = com.impinj.stp.StpApi.VoidTagResponsibility.getDefaultInstance();
          onChanged();
        } else {
          voidTagResponsibilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public com.impinj.stp.StpApi.VoidTagResponsibility.Builder getVoidTagResponsibilityBuilder() {
        bitField0_ |= 0x00010000;
        onChanged();
        return getVoidTagResponsibilityFieldBuilder().getBuilder();
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      public com.impinj.stp.StpApi.VoidTagResponsibilityOrBuilder getVoidTagResponsibilityOrBuilder() {
        if (voidTagResponsibilityBuilder_ != null) {
          return voidTagResponsibilityBuilder_.getMessageOrBuilder();
        } else {
          return voidTagResponsibility_;
        }
      }
      /**
       *
       * In cases where there is voiding possible, this is how the
       * user specifies the responsibility of this device
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.VoidTagResponsibility, com.impinj.stp.StpApi.VoidTagResponsibility.Builder, com.impinj.stp.StpApi.VoidTagResponsibilityOrBuilder> 
          getVoidTagResponsibilityFieldBuilder() {
        if (voidTagResponsibilityBuilder_ == null) {
          voidTagResponsibilityBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.VoidTagResponsibility, com.impinj.stp.StpApi.VoidTagResponsibility.Builder, com.impinj.stp.StpApi.VoidTagResponsibilityOrBuilder>(
                  voidTagResponsibility_,
                  getParentForChildren(),
                  isClean());
          voidTagResponsibility_ = null;
        }
        return voidTagResponsibilityBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OperationResponsibility)
    }

    static {
      defaultInstance = new OperationResponsibility(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OperationResponsibility)
  }

  public interface VoidTagResponsibilityOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool pc_word_to_zero = 1 [default = true];
    /**
     *
     * Set EPC Length to 0.
     */
    boolean hasPcWordToZero();
    /**
     *
     * Set EPC Length to 0.
     */
    boolean getPcWordToZero();

    // optional bool first_epc_words = 2 [default = true];
    /**
     *
     * Encode first two EPC words to DEAD DEAD.
     */
    boolean hasFirstEpcWords();
    /**
     *
     * Encode first two EPC words to DEAD DEAD.
     */
    boolean getFirstEpcWords();

    // optional bool permalock = 3 [default = true];
    /**
     *
     * Permalock the entire tag.
     */
    boolean hasPermalock();
    /**
     *
     * Permalock the entire tag.
     */
    boolean getPermalock();

    // optional bool kill = 4 [default = true];
    /**
     *
     * Kill the tag.
     */
    boolean hasKill();
    /**
     *
     * Kill the tag.
     */
    boolean getKill();
  }
  /**
   * Protobuf type {@code Impinj.STP.VoidTagResponsibility}
   */
  public static final class VoidTagResponsibility extends
      com.google.protobuf.GeneratedMessage
      implements VoidTagResponsibilityOrBuilder {
    // Use VoidTagResponsibility.newBuilder() to construct.
    private VoidTagResponsibility(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private VoidTagResponsibility(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final VoidTagResponsibility defaultInstance;
    public static VoidTagResponsibility getDefaultInstance() {
      return defaultInstance;
    }

    public VoidTagResponsibility getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private VoidTagResponsibility(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              pcWordToZero_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              firstEpcWords_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              permalock_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              kill_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagResponsibility_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagResponsibility_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.VoidTagResponsibility.class, com.impinj.stp.StpApi.VoidTagResponsibility.Builder.class);
    }

    public static com.google.protobuf.Parser<VoidTagResponsibility> PARSER =
        new com.google.protobuf.AbstractParser<VoidTagResponsibility>() {
      public VoidTagResponsibility parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new VoidTagResponsibility(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<VoidTagResponsibility> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool pc_word_to_zero = 1 [default = true];
    public static final int PC_WORD_TO_ZERO_FIELD_NUMBER = 1;
    private boolean pcWordToZero_;
    /**
     *
     * Set EPC Length to 0.
     */
    public boolean hasPcWordToZero() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Set EPC Length to 0.
     */
    public boolean getPcWordToZero() {
      return pcWordToZero_;
    }

    // optional bool first_epc_words = 2 [default = true];
    public static final int FIRST_EPC_WORDS_FIELD_NUMBER = 2;
    private boolean firstEpcWords_;
    /**
     *
     * Encode first two EPC words to DEAD DEAD.
     */
    public boolean hasFirstEpcWords() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Encode first two EPC words to DEAD DEAD.
     */
    public boolean getFirstEpcWords() {
      return firstEpcWords_;
    }

    // optional bool permalock = 3 [default = true];
    public static final int PERMALOCK_FIELD_NUMBER = 3;
    private boolean permalock_;
    /**
     *
     * Permalock the entire tag.
     */
    public boolean hasPermalock() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Permalock the entire tag.
     */
    public boolean getPermalock() {
      return permalock_;
    }

    // optional bool kill = 4 [default = true];
    public static final int KILL_FIELD_NUMBER = 4;
    private boolean kill_;
    /**
     *
     * Kill the tag.
     */
    public boolean hasKill() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Kill the tag.
     */
    public boolean getKill() {
      return kill_;
    }

    private void initFields() {
      pcWordToZero_ = true;
      firstEpcWords_ = true;
      permalock_ = true;
      kill_ = true;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, pcWordToZero_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, firstEpcWords_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, permalock_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, kill_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, pcWordToZero_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, firstEpcWords_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, permalock_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, kill_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.VoidTagResponsibility parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.VoidTagResponsibility prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.VoidTagResponsibility}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.VoidTagResponsibilityOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagResponsibility_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagResponsibility_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.VoidTagResponsibility.class, com.impinj.stp.StpApi.VoidTagResponsibility.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.VoidTagResponsibility.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        pcWordToZero_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        firstEpcWords_ = true;
        bitField0_ = (bitField0_ & ~0x00000002);
        permalock_ = true;
        bitField0_ = (bitField0_ & ~0x00000004);
        kill_ = true;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagResponsibility_descriptor;
      }

      public com.impinj.stp.StpApi.VoidTagResponsibility getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.VoidTagResponsibility.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.VoidTagResponsibility build() {
        com.impinj.stp.StpApi.VoidTagResponsibility result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.VoidTagResponsibility buildPartial() {
        com.impinj.stp.StpApi.VoidTagResponsibility result = new com.impinj.stp.StpApi.VoidTagResponsibility(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.pcWordToZero_ = pcWordToZero_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.firstEpcWords_ = firstEpcWords_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.permalock_ = permalock_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.kill_ = kill_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.VoidTagResponsibility) {
          return mergeFrom((com.impinj.stp.StpApi.VoidTagResponsibility)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.VoidTagResponsibility other) {
        if (other == com.impinj.stp.StpApi.VoidTagResponsibility.getDefaultInstance()) return this;
        if (other.hasPcWordToZero()) {
          setPcWordToZero(other.getPcWordToZero());
        }
        if (other.hasFirstEpcWords()) {
          setFirstEpcWords(other.getFirstEpcWords());
        }
        if (other.hasPermalock()) {
          setPermalock(other.getPermalock());
        }
        if (other.hasKill()) {
          setKill(other.getKill());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.VoidTagResponsibility parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.VoidTagResponsibility) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool pc_word_to_zero = 1 [default = true];
      private boolean pcWordToZero_ = true;
      /**
       *
       * Set EPC Length to 0.
       */
      public boolean hasPcWordToZero() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Set EPC Length to 0.
       */
      public boolean getPcWordToZero() {
        return pcWordToZero_;
      }
      /**
       *
       * Set EPC Length to 0.
       */
      public Builder setPcWordToZero(boolean value) {
        bitField0_ |= 0x00000001;
        pcWordToZero_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Set EPC Length to 0.
       */
      public Builder clearPcWordToZero() {
        bitField0_ = (bitField0_ & ~0x00000001);
        pcWordToZero_ = true;
        onChanged();
        return this;
      }

      // optional bool first_epc_words = 2 [default = true];
      private boolean firstEpcWords_ = true;
      /**
       *
       * Encode first two EPC words to DEAD DEAD.
       */
      public boolean hasFirstEpcWords() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Encode first two EPC words to DEAD DEAD.
       */
      public boolean getFirstEpcWords() {
        return firstEpcWords_;
      }
      /**
       *
       * Encode first two EPC words to DEAD DEAD.
       */
      public Builder setFirstEpcWords(boolean value) {
        bitField0_ |= 0x00000002;
        firstEpcWords_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Encode first two EPC words to DEAD DEAD.
       */
      public Builder clearFirstEpcWords() {
        bitField0_ = (bitField0_ & ~0x00000002);
        firstEpcWords_ = true;
        onChanged();
        return this;
      }

      // optional bool permalock = 3 [default = true];
      private boolean permalock_ = true;
      /**
       *
       * Permalock the entire tag.
       */
      public boolean hasPermalock() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Permalock the entire tag.
       */
      public boolean getPermalock() {
        return permalock_;
      }
      /**
       *
       * Permalock the entire tag.
       */
      public Builder setPermalock(boolean value) {
        bitField0_ |= 0x00000004;
        permalock_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Permalock the entire tag.
       */
      public Builder clearPermalock() {
        bitField0_ = (bitField0_ & ~0x00000004);
        permalock_ = true;
        onChanged();
        return this;
      }

      // optional bool kill = 4 [default = true];
      private boolean kill_ = true;
      /**
       *
       * Kill the tag.
       */
      public boolean hasKill() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Kill the tag.
       */
      public boolean getKill() {
        return kill_;
      }
      /**
       *
       * Kill the tag.
       */
      public Builder setKill(boolean value) {
        bitField0_ |= 0x00000008;
        kill_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Kill the tag.
       */
      public Builder clearKill() {
        bitField0_ = (bitField0_ & ~0x00000008);
        kill_ = true;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.VoidTagResponsibility)
    }

    static {
      defaultInstance = new VoidTagResponsibility(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.VoidTagResponsibility)
  }

  public interface OperationSummaryReportConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required bool enable_operation_summary_reports = 1 [default = true];
    /**
     */
    boolean hasEnableOperationSummaryReports();
    /**
     */
    boolean getEnableOperationSummaryReports();
  }
  /**
   * Protobuf type {@code Impinj.STP.OperationSummaryReportConfig}
   *
   * Enable a summary report at the end of the device operation.
   */
  public static final class OperationSummaryReportConfig extends
      com.google.protobuf.GeneratedMessage
      implements OperationSummaryReportConfigOrBuilder {
    // Use OperationSummaryReportConfig.newBuilder() to construct.
    private OperationSummaryReportConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OperationSummaryReportConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OperationSummaryReportConfig defaultInstance;
    public static OperationSummaryReportConfig getDefaultInstance() {
      return defaultInstance;
    }

    public OperationSummaryReportConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OperationSummaryReportConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableOperationSummaryReports_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReportConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReportConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OperationSummaryReportConfig.class, com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<OperationSummaryReportConfig> PARSER =
        new com.google.protobuf.AbstractParser<OperationSummaryReportConfig>() {
      public OperationSummaryReportConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OperationSummaryReportConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OperationSummaryReportConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required bool enable_operation_summary_reports = 1 [default = true];
    public static final int ENABLE_OPERATION_SUMMARY_REPORTS_FIELD_NUMBER = 1;
    private boolean enableOperationSummaryReports_;
    /**
     */
    public boolean hasEnableOperationSummaryReports() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getEnableOperationSummaryReports() {
      return enableOperationSummaryReports_;
    }

    private void initFields() {
      enableOperationSummaryReports_ = true;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasEnableOperationSummaryReports()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableOperationSummaryReports_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableOperationSummaryReports_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReportConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OperationSummaryReportConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OperationSummaryReportConfig}
     *
     * Enable a summary report at the end of the device operation.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OperationSummaryReportConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReportConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReportConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OperationSummaryReportConfig.class, com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OperationSummaryReportConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableOperationSummaryReports_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReportConfig_descriptor;
      }

      public com.impinj.stp.StpApi.OperationSummaryReportConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OperationSummaryReportConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OperationSummaryReportConfig build() {
        com.impinj.stp.StpApi.OperationSummaryReportConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OperationSummaryReportConfig buildPartial() {
        com.impinj.stp.StpApi.OperationSummaryReportConfig result = new com.impinj.stp.StpApi.OperationSummaryReportConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableOperationSummaryReports_ = enableOperationSummaryReports_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OperationSummaryReportConfig) {
          return mergeFrom((com.impinj.stp.StpApi.OperationSummaryReportConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OperationSummaryReportConfig other) {
        if (other == com.impinj.stp.StpApi.OperationSummaryReportConfig.getDefaultInstance()) return this;
        if (other.hasEnableOperationSummaryReports()) {
          setEnableOperationSummaryReports(other.getEnableOperationSummaryReports());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasEnableOperationSummaryReports()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OperationSummaryReportConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OperationSummaryReportConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required bool enable_operation_summary_reports = 1 [default = true];
      private boolean enableOperationSummaryReports_ = true;
      /**
       */
      public boolean hasEnableOperationSummaryReports() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getEnableOperationSummaryReports() {
        return enableOperationSummaryReports_;
      }
      /**
       */
      public Builder setEnableOperationSummaryReports(boolean value) {
        bitField0_ |= 0x00000001;
        enableOperationSummaryReports_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEnableOperationSummaryReports() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableOperationSummaryReports_ = true;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OperationSummaryReportConfig)
    }

    static {
      defaultInstance = new OperationSummaryReportConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OperationSummaryReportConfig)
  }

  public interface TagOperationReportConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required bool enable_tag_operation_reports = 1 [default = true];
    /**
     */
    boolean hasEnableTagOperationReports();
    /**
     */
    boolean getEnableTagOperationReports();

    // optional bool enable_tag_operation_retry_reports = 2 [default = false];
    /**
     */
    boolean hasEnableTagOperationRetryReports();
    /**
     */
    boolean getEnableTagOperationRetryReports();

    // optional .Impinj.STP.TagOperationReportTrigger tag_operation_report_trigger = 3 [default = TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE];
    /**
     */
    boolean hasTagOperationReportTrigger();
    /**
     */
    com.impinj.stp.StpApi.TagOperationReportTrigger getTagOperationReportTrigger();

    // optional bool enable_reporting_over_serial_port = 4 [default = false];
    /**
     *
     * Send a brief one-line ASCII report over the device's serial
     * port. Only used for single operating mode.  See
     * OperationMode_.
     */
    boolean hasEnableReportingOverSerialPort();
    /**
     *
     * Send a brief one-line ASCII report over the device's serial
     * port. Only used for single operating mode.  See
     * OperationMode_.
     */
    boolean getEnableReportingOverSerialPort();

    // optional bool send_serial_report_after_GPO_deassert = 5 [default = false];
    /**
     *
     * Send after GPO pass/fail assert or deassert.
     */
    boolean hasSendSerialReportAfterGPODeassert();
    /**
     *
     * Send after GPO pass/fail assert or deassert.
     */
    boolean getSendSerialReportAfterGPODeassert();

    // optional bool enable_epc_in_serial_report = 6 [default = false];
    /**
     *
     * This only has meaning if enable_reporting_over_serial_port
     * is true.  When this is false, the EPC reported in the serial
     * tag report is the empty string instead of the actual EPC
     * read.  This is useful for reducing the amount of traffic
     * over the serial port if the EPC is not useful for a
     * particular application.
     */
    boolean hasEnableEpcInSerialReport();
    /**
     *
     * This only has meaning if enable_reporting_over_serial_port
     * is true.  When this is false, the EPC reported in the serial
     * tag report is the empty string instead of the actual EPC
     * read.  This is useful for reducing the amount of traffic
     * over the serial port if the EPC is not useful for a
     * particular application.
     */
    boolean getEnableEpcInSerialReport();

    // optional bool enable_tag_operation_pass_already_done_reports = 7 [default = false];
    /**
     *
     * KDK DOC: This enables tag operation reports for tags
     * entering the system that have already been encoded. They
     * were not re-encoded.
     */
    boolean hasEnableTagOperationPassAlreadyDoneReports();
    /**
     *
     * KDK DOC: This enables tag operation reports for tags
     * entering the system that have already been encoded. They
     * were not re-encoded.
     */
    boolean getEnableTagOperationPassAlreadyDoneReports();
  }
  /**
   * Protobuf type {@code Impinj.STP.TagOperationReportConfig}
   *
   * Configure what types of reports to send from the device.
   */
  public static final class TagOperationReportConfig extends
      com.google.protobuf.GeneratedMessage
      implements TagOperationReportConfigOrBuilder {
    // Use TagOperationReportConfig.newBuilder() to construct.
    private TagOperationReportConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TagOperationReportConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TagOperationReportConfig defaultInstance;
    public static TagOperationReportConfig getDefaultInstance() {
      return defaultInstance;
    }

    public TagOperationReportConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TagOperationReportConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableTagOperationReports_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              enableTagOperationRetryReports_ = input.readBool();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.TagOperationReportTrigger value = com.impinj.stp.StpApi.TagOperationReportTrigger.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                tagOperationReportTrigger_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              enableReportingOverSerialPort_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              sendSerialReportAfterGPODeassert_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              enableEpcInSerialReport_ = input.readBool();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              enableTagOperationPassAlreadyDoneReports_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReportConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReportConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TagOperationReportConfig.class, com.impinj.stp.StpApi.TagOperationReportConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<TagOperationReportConfig> PARSER =
        new com.google.protobuf.AbstractParser<TagOperationReportConfig>() {
      public TagOperationReportConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TagOperationReportConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TagOperationReportConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required bool enable_tag_operation_reports = 1 [default = true];
    public static final int ENABLE_TAG_OPERATION_REPORTS_FIELD_NUMBER = 1;
    private boolean enableTagOperationReports_;
    /**
     */
    public boolean hasEnableTagOperationReports() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getEnableTagOperationReports() {
      return enableTagOperationReports_;
    }

    // optional bool enable_tag_operation_retry_reports = 2 [default = false];
    public static final int ENABLE_TAG_OPERATION_RETRY_REPORTS_FIELD_NUMBER = 2;
    private boolean enableTagOperationRetryReports_;
    /**
     */
    public boolean hasEnableTagOperationRetryReports() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public boolean getEnableTagOperationRetryReports() {
      return enableTagOperationRetryReports_;
    }

    // optional .Impinj.STP.TagOperationReportTrigger tag_operation_report_trigger = 3 [default = TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE];
    public static final int TAG_OPERATION_REPORT_TRIGGER_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.TagOperationReportTrigger tagOperationReportTrigger_;
    /**
     */
    public boolean hasTagOperationReportTrigger() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagOperationReportTrigger getTagOperationReportTrigger() {
      return tagOperationReportTrigger_;
    }

    // optional bool enable_reporting_over_serial_port = 4 [default = false];
    public static final int ENABLE_REPORTING_OVER_SERIAL_PORT_FIELD_NUMBER = 4;
    private boolean enableReportingOverSerialPort_;
    /**
     *
     * Send a brief one-line ASCII report over the device's serial
     * port. Only used for single operating mode.  See
     * OperationMode_.
     */
    public boolean hasEnableReportingOverSerialPort() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Send a brief one-line ASCII report over the device's serial
     * port. Only used for single operating mode.  See
     * OperationMode_.
     */
    public boolean getEnableReportingOverSerialPort() {
      return enableReportingOverSerialPort_;
    }

    // optional bool send_serial_report_after_GPO_deassert = 5 [default = false];
    public static final int SEND_SERIAL_REPORT_AFTER_GPO_DEASSERT_FIELD_NUMBER = 5;
    private boolean sendSerialReportAfterGPODeassert_;
    /**
     *
     * Send after GPO pass/fail assert or deassert.
     */
    public boolean hasSendSerialReportAfterGPODeassert() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * Send after GPO pass/fail assert or deassert.
     */
    public boolean getSendSerialReportAfterGPODeassert() {
      return sendSerialReportAfterGPODeassert_;
    }

    // optional bool enable_epc_in_serial_report = 6 [default = false];
    public static final int ENABLE_EPC_IN_SERIAL_REPORT_FIELD_NUMBER = 6;
    private boolean enableEpcInSerialReport_;
    /**
     *
     * This only has meaning if enable_reporting_over_serial_port
     * is true.  When this is false, the EPC reported in the serial
     * tag report is the empty string instead of the actual EPC
     * read.  This is useful for reducing the amount of traffic
     * over the serial port if the EPC is not useful for a
     * particular application.
     */
    public boolean hasEnableEpcInSerialReport() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * This only has meaning if enable_reporting_over_serial_port
     * is true.  When this is false, the EPC reported in the serial
     * tag report is the empty string instead of the actual EPC
     * read.  This is useful for reducing the amount of traffic
     * over the serial port if the EPC is not useful for a
     * particular application.
     */
    public boolean getEnableEpcInSerialReport() {
      return enableEpcInSerialReport_;
    }

    // optional bool enable_tag_operation_pass_already_done_reports = 7 [default = false];
    public static final int ENABLE_TAG_OPERATION_PASS_ALREADY_DONE_REPORTS_FIELD_NUMBER = 7;
    private boolean enableTagOperationPassAlreadyDoneReports_;
    /**
     *
     * KDK DOC: This enables tag operation reports for tags
     * entering the system that have already been encoded. They
     * were not re-encoded.
     */
    public boolean hasEnableTagOperationPassAlreadyDoneReports() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     *
     * KDK DOC: This enables tag operation reports for tags
     * entering the system that have already been encoded. They
     * were not re-encoded.
     */
    public boolean getEnableTagOperationPassAlreadyDoneReports() {
      return enableTagOperationPassAlreadyDoneReports_;
    }

    private void initFields() {
      enableTagOperationReports_ = true;
      enableTagOperationRetryReports_ = false;
      tagOperationReportTrigger_ = com.impinj.stp.StpApi.TagOperationReportTrigger.TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE;
      enableReportingOverSerialPort_ = false;
      sendSerialReportAfterGPODeassert_ = false;
      enableEpcInSerialReport_ = false;
      enableTagOperationPassAlreadyDoneReports_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasEnableTagOperationReports()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableTagOperationReports_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, enableTagOperationRetryReports_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, tagOperationReportTrigger_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, enableReportingOverSerialPort_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, sendSerialReportAfterGPODeassert_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, enableEpcInSerialReport_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBool(7, enableTagOperationPassAlreadyDoneReports_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableTagOperationReports_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, enableTagOperationRetryReports_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, tagOperationReportTrigger_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, enableReportingOverSerialPort_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, sendSerialReportAfterGPODeassert_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, enableEpcInSerialReport_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, enableTagOperationPassAlreadyDoneReports_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagOperationReportConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TagOperationReportConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TagOperationReportConfig}
     *
     * Configure what types of reports to send from the device.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TagOperationReportConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReportConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReportConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TagOperationReportConfig.class, com.impinj.stp.StpApi.TagOperationReportConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TagOperationReportConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableTagOperationReports_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        enableTagOperationRetryReports_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        tagOperationReportTrigger_ = com.impinj.stp.StpApi.TagOperationReportTrigger.TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE;
        bitField0_ = (bitField0_ & ~0x00000004);
        enableReportingOverSerialPort_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        sendSerialReportAfterGPODeassert_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        enableEpcInSerialReport_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        enableTagOperationPassAlreadyDoneReports_ = false;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReportConfig_descriptor;
      }

      public com.impinj.stp.StpApi.TagOperationReportConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TagOperationReportConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TagOperationReportConfig build() {
        com.impinj.stp.StpApi.TagOperationReportConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TagOperationReportConfig buildPartial() {
        com.impinj.stp.StpApi.TagOperationReportConfig result = new com.impinj.stp.StpApi.TagOperationReportConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableTagOperationReports_ = enableTagOperationReports_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.enableTagOperationRetryReports_ = enableTagOperationRetryReports_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.tagOperationReportTrigger_ = tagOperationReportTrigger_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.enableReportingOverSerialPort_ = enableReportingOverSerialPort_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.sendSerialReportAfterGPODeassert_ = sendSerialReportAfterGPODeassert_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.enableEpcInSerialReport_ = enableEpcInSerialReport_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.enableTagOperationPassAlreadyDoneReports_ = enableTagOperationPassAlreadyDoneReports_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TagOperationReportConfig) {
          return mergeFrom((com.impinj.stp.StpApi.TagOperationReportConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TagOperationReportConfig other) {
        if (other == com.impinj.stp.StpApi.TagOperationReportConfig.getDefaultInstance()) return this;
        if (other.hasEnableTagOperationReports()) {
          setEnableTagOperationReports(other.getEnableTagOperationReports());
        }
        if (other.hasEnableTagOperationRetryReports()) {
          setEnableTagOperationRetryReports(other.getEnableTagOperationRetryReports());
        }
        if (other.hasTagOperationReportTrigger()) {
          setTagOperationReportTrigger(other.getTagOperationReportTrigger());
        }
        if (other.hasEnableReportingOverSerialPort()) {
          setEnableReportingOverSerialPort(other.getEnableReportingOverSerialPort());
        }
        if (other.hasSendSerialReportAfterGPODeassert()) {
          setSendSerialReportAfterGPODeassert(other.getSendSerialReportAfterGPODeassert());
        }
        if (other.hasEnableEpcInSerialReport()) {
          setEnableEpcInSerialReport(other.getEnableEpcInSerialReport());
        }
        if (other.hasEnableTagOperationPassAlreadyDoneReports()) {
          setEnableTagOperationPassAlreadyDoneReports(other.getEnableTagOperationPassAlreadyDoneReports());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasEnableTagOperationReports()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TagOperationReportConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TagOperationReportConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required bool enable_tag_operation_reports = 1 [default = true];
      private boolean enableTagOperationReports_ = true;
      /**
       */
      public boolean hasEnableTagOperationReports() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getEnableTagOperationReports() {
        return enableTagOperationReports_;
      }
      /**
       */
      public Builder setEnableTagOperationReports(boolean value) {
        bitField0_ |= 0x00000001;
        enableTagOperationReports_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEnableTagOperationReports() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableTagOperationReports_ = true;
        onChanged();
        return this;
      }

      // optional bool enable_tag_operation_retry_reports = 2 [default = false];
      private boolean enableTagOperationRetryReports_ ;
      /**
       */
      public boolean hasEnableTagOperationRetryReports() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public boolean getEnableTagOperationRetryReports() {
        return enableTagOperationRetryReports_;
      }
      /**
       */
      public Builder setEnableTagOperationRetryReports(boolean value) {
        bitField0_ |= 0x00000002;
        enableTagOperationRetryReports_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEnableTagOperationRetryReports() {
        bitField0_ = (bitField0_ & ~0x00000002);
        enableTagOperationRetryReports_ = false;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.TagOperationReportTrigger tag_operation_report_trigger = 3 [default = TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE];
      private com.impinj.stp.StpApi.TagOperationReportTrigger tagOperationReportTrigger_ = com.impinj.stp.StpApi.TagOperationReportTrigger.TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE;
      /**
       */
      public boolean hasTagOperationReportTrigger() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReportTrigger getTagOperationReportTrigger() {
        return tagOperationReportTrigger_;
      }
      /**
       */
      public Builder setTagOperationReportTrigger(com.impinj.stp.StpApi.TagOperationReportTrigger value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        tagOperationReportTrigger_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagOperationReportTrigger() {
        bitField0_ = (bitField0_ & ~0x00000004);
        tagOperationReportTrigger_ = com.impinj.stp.StpApi.TagOperationReportTrigger.TAG_OPERATION_REPORT_TRIGGER_IMMEDIATE;
        onChanged();
        return this;
      }

      // optional bool enable_reporting_over_serial_port = 4 [default = false];
      private boolean enableReportingOverSerialPort_ ;
      /**
       *
       * Send a brief one-line ASCII report over the device's serial
       * port. Only used for single operating mode.  See
       * OperationMode_.
       */
      public boolean hasEnableReportingOverSerialPort() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Send a brief one-line ASCII report over the device's serial
       * port. Only used for single operating mode.  See
       * OperationMode_.
       */
      public boolean getEnableReportingOverSerialPort() {
        return enableReportingOverSerialPort_;
      }
      /**
       *
       * Send a brief one-line ASCII report over the device's serial
       * port. Only used for single operating mode.  See
       * OperationMode_.
       */
      public Builder setEnableReportingOverSerialPort(boolean value) {
        bitField0_ |= 0x00000008;
        enableReportingOverSerialPort_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Send a brief one-line ASCII report over the device's serial
       * port. Only used for single operating mode.  See
       * OperationMode_.
       */
      public Builder clearEnableReportingOverSerialPort() {
        bitField0_ = (bitField0_ & ~0x00000008);
        enableReportingOverSerialPort_ = false;
        onChanged();
        return this;
      }

      // optional bool send_serial_report_after_GPO_deassert = 5 [default = false];
      private boolean sendSerialReportAfterGPODeassert_ ;
      /**
       *
       * Send after GPO pass/fail assert or deassert.
       */
      public boolean hasSendSerialReportAfterGPODeassert() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * Send after GPO pass/fail assert or deassert.
       */
      public boolean getSendSerialReportAfterGPODeassert() {
        return sendSerialReportAfterGPODeassert_;
      }
      /**
       *
       * Send after GPO pass/fail assert or deassert.
       */
      public Builder setSendSerialReportAfterGPODeassert(boolean value) {
        bitField0_ |= 0x00000010;
        sendSerialReportAfterGPODeassert_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Send after GPO pass/fail assert or deassert.
       */
      public Builder clearSendSerialReportAfterGPODeassert() {
        bitField0_ = (bitField0_ & ~0x00000010);
        sendSerialReportAfterGPODeassert_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_epc_in_serial_report = 6 [default = false];
      private boolean enableEpcInSerialReport_ ;
      /**
       *
       * This only has meaning if enable_reporting_over_serial_port
       * is true.  When this is false, the EPC reported in the serial
       * tag report is the empty string instead of the actual EPC
       * read.  This is useful for reducing the amount of traffic
       * over the serial port if the EPC is not useful for a
       * particular application.
       */
      public boolean hasEnableEpcInSerialReport() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       *
       * This only has meaning if enable_reporting_over_serial_port
       * is true.  When this is false, the EPC reported in the serial
       * tag report is the empty string instead of the actual EPC
       * read.  This is useful for reducing the amount of traffic
       * over the serial port if the EPC is not useful for a
       * particular application.
       */
      public boolean getEnableEpcInSerialReport() {
        return enableEpcInSerialReport_;
      }
      /**
       *
       * This only has meaning if enable_reporting_over_serial_port
       * is true.  When this is false, the EPC reported in the serial
       * tag report is the empty string instead of the actual EPC
       * read.  This is useful for reducing the amount of traffic
       * over the serial port if the EPC is not useful for a
       * particular application.
       */
      public Builder setEnableEpcInSerialReport(boolean value) {
        bitField0_ |= 0x00000020;
        enableEpcInSerialReport_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * This only has meaning if enable_reporting_over_serial_port
       * is true.  When this is false, the EPC reported in the serial
       * tag report is the empty string instead of the actual EPC
       * read.  This is useful for reducing the amount of traffic
       * over the serial port if the EPC is not useful for a
       * particular application.
       */
      public Builder clearEnableEpcInSerialReport() {
        bitField0_ = (bitField0_ & ~0x00000020);
        enableEpcInSerialReport_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_tag_operation_pass_already_done_reports = 7 [default = false];
      private boolean enableTagOperationPassAlreadyDoneReports_ ;
      /**
       *
       * KDK DOC: This enables tag operation reports for tags
       * entering the system that have already been encoded. They
       * were not re-encoded.
       */
      public boolean hasEnableTagOperationPassAlreadyDoneReports() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       *
       * KDK DOC: This enables tag operation reports for tags
       * entering the system that have already been encoded. They
       * were not re-encoded.
       */
      public boolean getEnableTagOperationPassAlreadyDoneReports() {
        return enableTagOperationPassAlreadyDoneReports_;
      }
      /**
       *
       * KDK DOC: This enables tag operation reports for tags
       * entering the system that have already been encoded. They
       * were not re-encoded.
       */
      public Builder setEnableTagOperationPassAlreadyDoneReports(boolean value) {
        bitField0_ |= 0x00000040;
        enableTagOperationPassAlreadyDoneReports_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * KDK DOC: This enables tag operation reports for tags
       * entering the system that have already been encoded. They
       * were not re-encoded.
       */
      public Builder clearEnableTagOperationPassAlreadyDoneReports() {
        bitField0_ = (bitField0_ & ~0x00000040);
        enableTagOperationPassAlreadyDoneReports_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TagOperationReportConfig)
    }

    static {
      defaultInstance = new TagOperationReportConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TagOperationReportConfig)
  }

  public interface ReportConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.DeviceEventConfig device_event_config = 1;
    /**
     */
    boolean hasDeviceEventConfig();
    /**
     */
    com.impinj.stp.StpApi.DeviceEventConfig getDeviceEventConfig();
    /**
     */
    com.impinj.stp.StpApi.DeviceEventConfigOrBuilder getDeviceEventConfigOrBuilder();

    // optional .Impinj.STP.OperationSummaryReportConfig operation_summary_report_config = 2;
    /**
     */
    boolean hasOperationSummaryReportConfig();
    /**
     */
    com.impinj.stp.StpApi.OperationSummaryReportConfig getOperationSummaryReportConfig();
    /**
     */
    com.impinj.stp.StpApi.OperationSummaryReportConfigOrBuilder getOperationSummaryReportConfigOrBuilder();

    // optional .Impinj.STP.TagOperationReportConfig tag_operation_report_config = 3;
    /**
     */
    boolean hasTagOperationReportConfig();
    /**
     */
    com.impinj.stp.StpApi.TagOperationReportConfig getTagOperationReportConfig();
    /**
     */
    com.impinj.stp.StpApi.TagOperationReportConfigOrBuilder getTagOperationReportConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.ReportConfig}
   *
   * Define what to report to the client application.
   */
  public static final class ReportConfig extends
      com.google.protobuf.GeneratedMessage
      implements ReportConfigOrBuilder {
    // Use ReportConfig.newBuilder() to construct.
    private ReportConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ReportConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ReportConfig defaultInstance;
    public static ReportConfig getDefaultInstance() {
      return defaultInstance;
    }

    public ReportConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ReportConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.DeviceEventConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = deviceEventConfig_.toBuilder();
              }
              deviceEventConfig_ = input.readMessage(com.impinj.stp.StpApi.DeviceEventConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceEventConfig_);
                deviceEventConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = operationSummaryReportConfig_.toBuilder();
              }
              operationSummaryReportConfig_ = input.readMessage(com.impinj.stp.StpApi.OperationSummaryReportConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(operationSummaryReportConfig_);
                operationSummaryReportConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.TagOperationReportConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = tagOperationReportConfig_.toBuilder();
              }
              tagOperationReportConfig_ = input.readMessage(com.impinj.stp.StpApi.TagOperationReportConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tagOperationReportConfig_);
                tagOperationReportConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_ReportConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_ReportConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.ReportConfig.class, com.impinj.stp.StpApi.ReportConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<ReportConfig> PARSER =
        new com.google.protobuf.AbstractParser<ReportConfig>() {
      public ReportConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ReportConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ReportConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.DeviceEventConfig device_event_config = 1;
    public static final int DEVICE_EVENT_CONFIG_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.DeviceEventConfig deviceEventConfig_;
    /**
     */
    public boolean hasDeviceEventConfig() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceEventConfig getDeviceEventConfig() {
      return deviceEventConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceEventConfigOrBuilder getDeviceEventConfigOrBuilder() {
      return deviceEventConfig_;
    }

    // optional .Impinj.STP.OperationSummaryReportConfig operation_summary_report_config = 2;
    public static final int OPERATION_SUMMARY_REPORT_CONFIG_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.OperationSummaryReportConfig operationSummaryReportConfig_;
    /**
     */
    public boolean hasOperationSummaryReportConfig() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationSummaryReportConfig getOperationSummaryReportConfig() {
      return operationSummaryReportConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationSummaryReportConfigOrBuilder getOperationSummaryReportConfigOrBuilder() {
      return operationSummaryReportConfig_;
    }

    // optional .Impinj.STP.TagOperationReportConfig tag_operation_report_config = 3;
    public static final int TAG_OPERATION_REPORT_CONFIG_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.TagOperationReportConfig tagOperationReportConfig_;
    /**
     */
    public boolean hasTagOperationReportConfig() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagOperationReportConfig getTagOperationReportConfig() {
      return tagOperationReportConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TagOperationReportConfigOrBuilder getTagOperationReportConfigOrBuilder() {
      return tagOperationReportConfig_;
    }

    private void initFields() {
      deviceEventConfig_ = com.impinj.stp.StpApi.DeviceEventConfig.getDefaultInstance();
      operationSummaryReportConfig_ = com.impinj.stp.StpApi.OperationSummaryReportConfig.getDefaultInstance();
      tagOperationReportConfig_ = com.impinj.stp.StpApi.TagOperationReportConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasOperationSummaryReportConfig()) {
        if (!getOperationSummaryReportConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasTagOperationReportConfig()) {
        if (!getTagOperationReportConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, deviceEventConfig_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, operationSummaryReportConfig_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, tagOperationReportConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, deviceEventConfig_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, operationSummaryReportConfig_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, tagOperationReportConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.ReportConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.ReportConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.ReportConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.ReportConfig}
     *
     * Define what to report to the client application.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.ReportConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ReportConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ReportConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.ReportConfig.class, com.impinj.stp.StpApi.ReportConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.ReportConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDeviceEventConfigFieldBuilder();
          getOperationSummaryReportConfigFieldBuilder();
          getTagOperationReportConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (deviceEventConfigBuilder_ == null) {
          deviceEventConfig_ = com.impinj.stp.StpApi.DeviceEventConfig.getDefaultInstance();
        } else {
          deviceEventConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (operationSummaryReportConfigBuilder_ == null) {
          operationSummaryReportConfig_ = com.impinj.stp.StpApi.OperationSummaryReportConfig.getDefaultInstance();
        } else {
          operationSummaryReportConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (tagOperationReportConfigBuilder_ == null) {
          tagOperationReportConfig_ = com.impinj.stp.StpApi.TagOperationReportConfig.getDefaultInstance();
        } else {
          tagOperationReportConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_ReportConfig_descriptor;
      }

      public com.impinj.stp.StpApi.ReportConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.ReportConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.ReportConfig build() {
        com.impinj.stp.StpApi.ReportConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.ReportConfig buildPartial() {
        com.impinj.stp.StpApi.ReportConfig result = new com.impinj.stp.StpApi.ReportConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (deviceEventConfigBuilder_ == null) {
          result.deviceEventConfig_ = deviceEventConfig_;
        } else {
          result.deviceEventConfig_ = deviceEventConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (operationSummaryReportConfigBuilder_ == null) {
          result.operationSummaryReportConfig_ = operationSummaryReportConfig_;
        } else {
          result.operationSummaryReportConfig_ = operationSummaryReportConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (tagOperationReportConfigBuilder_ == null) {
          result.tagOperationReportConfig_ = tagOperationReportConfig_;
        } else {
          result.tagOperationReportConfig_ = tagOperationReportConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.ReportConfig) {
          return mergeFrom((com.impinj.stp.StpApi.ReportConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.ReportConfig other) {
        if (other == com.impinj.stp.StpApi.ReportConfig.getDefaultInstance()) return this;
        if (other.hasDeviceEventConfig()) {
          mergeDeviceEventConfig(other.getDeviceEventConfig());
        }
        if (other.hasOperationSummaryReportConfig()) {
          mergeOperationSummaryReportConfig(other.getOperationSummaryReportConfig());
        }
        if (other.hasTagOperationReportConfig()) {
          mergeTagOperationReportConfig(other.getTagOperationReportConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasOperationSummaryReportConfig()) {
          if (!getOperationSummaryReportConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasTagOperationReportConfig()) {
          if (!getTagOperationReportConfig().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.ReportConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.ReportConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.DeviceEventConfig device_event_config = 1;
      private com.impinj.stp.StpApi.DeviceEventConfig deviceEventConfig_ = com.impinj.stp.StpApi.DeviceEventConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceEventConfig, com.impinj.stp.StpApi.DeviceEventConfig.Builder, com.impinj.stp.StpApi.DeviceEventConfigOrBuilder> deviceEventConfigBuilder_;
      /**
       */
      public boolean hasDeviceEventConfig() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceEventConfig getDeviceEventConfig() {
        if (deviceEventConfigBuilder_ == null) {
          return deviceEventConfig_;
        } else {
          return deviceEventConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setDeviceEventConfig(com.impinj.stp.StpApi.DeviceEventConfig value) {
        if (deviceEventConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceEventConfig_ = value;
          onChanged();
        } else {
          deviceEventConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setDeviceEventConfig(
          com.impinj.stp.StpApi.DeviceEventConfig.Builder builderForValue) {
        if (deviceEventConfigBuilder_ == null) {
          deviceEventConfig_ = builderForValue.build();
          onChanged();
        } else {
          deviceEventConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeDeviceEventConfig(com.impinj.stp.StpApi.DeviceEventConfig value) {
        if (deviceEventConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              deviceEventConfig_ != com.impinj.stp.StpApi.DeviceEventConfig.getDefaultInstance()) {
            deviceEventConfig_ =
              com.impinj.stp.StpApi.DeviceEventConfig.newBuilder(deviceEventConfig_).mergeFrom(value).buildPartial();
          } else {
            deviceEventConfig_ = value;
          }
          onChanged();
        } else {
          deviceEventConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearDeviceEventConfig() {
        if (deviceEventConfigBuilder_ == null) {
          deviceEventConfig_ = com.impinj.stp.StpApi.DeviceEventConfig.getDefaultInstance();
          onChanged();
        } else {
          deviceEventConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceEventConfig.Builder getDeviceEventConfigBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDeviceEventConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceEventConfigOrBuilder getDeviceEventConfigOrBuilder() {
        if (deviceEventConfigBuilder_ != null) {
          return deviceEventConfigBuilder_.getMessageOrBuilder();
        } else {
          return deviceEventConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceEventConfig, com.impinj.stp.StpApi.DeviceEventConfig.Builder, com.impinj.stp.StpApi.DeviceEventConfigOrBuilder> 
          getDeviceEventConfigFieldBuilder() {
        if (deviceEventConfigBuilder_ == null) {
          deviceEventConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DeviceEventConfig, com.impinj.stp.StpApi.DeviceEventConfig.Builder, com.impinj.stp.StpApi.DeviceEventConfigOrBuilder>(
                  deviceEventConfig_,
                  getParentForChildren(),
                  isClean());
          deviceEventConfig_ = null;
        }
        return deviceEventConfigBuilder_;
      }

      // optional .Impinj.STP.OperationSummaryReportConfig operation_summary_report_config = 2;
      private com.impinj.stp.StpApi.OperationSummaryReportConfig operationSummaryReportConfig_ = com.impinj.stp.StpApi.OperationSummaryReportConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationSummaryReportConfig, com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder, com.impinj.stp.StpApi.OperationSummaryReportConfigOrBuilder> operationSummaryReportConfigBuilder_;
      /**
       */
      public boolean hasOperationSummaryReportConfig() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryReportConfig getOperationSummaryReportConfig() {
        if (operationSummaryReportConfigBuilder_ == null) {
          return operationSummaryReportConfig_;
        } else {
          return operationSummaryReportConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOperationSummaryReportConfig(com.impinj.stp.StpApi.OperationSummaryReportConfig value) {
        if (operationSummaryReportConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          operationSummaryReportConfig_ = value;
          onChanged();
        } else {
          operationSummaryReportConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setOperationSummaryReportConfig(
          com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder builderForValue) {
        if (operationSummaryReportConfigBuilder_ == null) {
          operationSummaryReportConfig_ = builderForValue.build();
          onChanged();
        } else {
          operationSummaryReportConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeOperationSummaryReportConfig(com.impinj.stp.StpApi.OperationSummaryReportConfig value) {
        if (operationSummaryReportConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              operationSummaryReportConfig_ != com.impinj.stp.StpApi.OperationSummaryReportConfig.getDefaultInstance()) {
            operationSummaryReportConfig_ =
              com.impinj.stp.StpApi.OperationSummaryReportConfig.newBuilder(operationSummaryReportConfig_).mergeFrom(value).buildPartial();
          } else {
            operationSummaryReportConfig_ = value;
          }
          onChanged();
        } else {
          operationSummaryReportConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearOperationSummaryReportConfig() {
        if (operationSummaryReportConfigBuilder_ == null) {
          operationSummaryReportConfig_ = com.impinj.stp.StpApi.OperationSummaryReportConfig.getDefaultInstance();
          onChanged();
        } else {
          operationSummaryReportConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder getOperationSummaryReportConfigBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getOperationSummaryReportConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryReportConfigOrBuilder getOperationSummaryReportConfigOrBuilder() {
        if (operationSummaryReportConfigBuilder_ != null) {
          return operationSummaryReportConfigBuilder_.getMessageOrBuilder();
        } else {
          return operationSummaryReportConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationSummaryReportConfig, com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder, com.impinj.stp.StpApi.OperationSummaryReportConfigOrBuilder> 
          getOperationSummaryReportConfigFieldBuilder() {
        if (operationSummaryReportConfigBuilder_ == null) {
          operationSummaryReportConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OperationSummaryReportConfig, com.impinj.stp.StpApi.OperationSummaryReportConfig.Builder, com.impinj.stp.StpApi.OperationSummaryReportConfigOrBuilder>(
                  operationSummaryReportConfig_,
                  getParentForChildren(),
                  isClean());
          operationSummaryReportConfig_ = null;
        }
        return operationSummaryReportConfigBuilder_;
      }

      // optional .Impinj.STP.TagOperationReportConfig tag_operation_report_config = 3;
      private com.impinj.stp.StpApi.TagOperationReportConfig tagOperationReportConfig_ = com.impinj.stp.StpApi.TagOperationReportConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagOperationReportConfig, com.impinj.stp.StpApi.TagOperationReportConfig.Builder, com.impinj.stp.StpApi.TagOperationReportConfigOrBuilder> tagOperationReportConfigBuilder_;
      /**
       */
      public boolean hasTagOperationReportConfig() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReportConfig getTagOperationReportConfig() {
        if (tagOperationReportConfigBuilder_ == null) {
          return tagOperationReportConfig_;
        } else {
          return tagOperationReportConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTagOperationReportConfig(com.impinj.stp.StpApi.TagOperationReportConfig value) {
        if (tagOperationReportConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tagOperationReportConfig_ = value;
          onChanged();
        } else {
          tagOperationReportConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder setTagOperationReportConfig(
          com.impinj.stp.StpApi.TagOperationReportConfig.Builder builderForValue) {
        if (tagOperationReportConfigBuilder_ == null) {
          tagOperationReportConfig_ = builderForValue.build();
          onChanged();
        } else {
          tagOperationReportConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder mergeTagOperationReportConfig(com.impinj.stp.StpApi.TagOperationReportConfig value) {
        if (tagOperationReportConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              tagOperationReportConfig_ != com.impinj.stp.StpApi.TagOperationReportConfig.getDefaultInstance()) {
            tagOperationReportConfig_ =
              com.impinj.stp.StpApi.TagOperationReportConfig.newBuilder(tagOperationReportConfig_).mergeFrom(value).buildPartial();
          } else {
            tagOperationReportConfig_ = value;
          }
          onChanged();
        } else {
          tagOperationReportConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder clearTagOperationReportConfig() {
        if (tagOperationReportConfigBuilder_ == null) {
          tagOperationReportConfig_ = com.impinj.stp.StpApi.TagOperationReportConfig.getDefaultInstance();
          onChanged();
        } else {
          tagOperationReportConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReportConfig.Builder getTagOperationReportConfigBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getTagOperationReportConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReportConfigOrBuilder getTagOperationReportConfigOrBuilder() {
        if (tagOperationReportConfigBuilder_ != null) {
          return tagOperationReportConfigBuilder_.getMessageOrBuilder();
        } else {
          return tagOperationReportConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagOperationReportConfig, com.impinj.stp.StpApi.TagOperationReportConfig.Builder, com.impinj.stp.StpApi.TagOperationReportConfigOrBuilder> 
          getTagOperationReportConfigFieldBuilder() {
        if (tagOperationReportConfigBuilder_ == null) {
          tagOperationReportConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TagOperationReportConfig, com.impinj.stp.StpApi.TagOperationReportConfig.Builder, com.impinj.stp.StpApi.TagOperationReportConfigOrBuilder>(
                  tagOperationReportConfig_,
                  getParentForChildren(),
                  isClean());
          tagOperationReportConfig_ = null;
        }
        return tagOperationReportConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.ReportConfig)
    }

    static {
      defaultInstance = new ReportConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.ReportConfig)
  }

  public interface AntennaConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required uint32 antenna_ID = 1;
    /**
     *
     * The 1-based ID of the reader antenna.
     */
    boolean hasAntennaID();
    /**
     *
     * The 1-based ID of the reader antenna.
     */
    int getAntennaID();

    // optional .Impinj.STP.Gen2Mode gen2_mode = 4 [default = GEN2_MODE_MAX_THROUGHPUT];
    /**
     */
    boolean hasGen2Mode();
    /**
     */
    com.impinj.stp.StpApi.Gen2Mode getGen2Mode();

    // optional .Impinj.STP.InventorySearchMode inventory_search_mode = 5 [default = INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS];
    /**
     */
    boolean hasInventorySearchMode();
    /**
     */
    com.impinj.stp.StpApi.InventorySearchMode getInventorySearchMode();

    // optional .Impinj.STP.Gen2Session gen2_session = 6 [default = GEN2_SESSION_1];
    /**
     */
    boolean hasGen2Session();
    /**
     */
    com.impinj.stp.StpApi.Gen2Session getGen2Session();

    // optional sint32 transmit_power = 7 [default = 3000];
    /**
     *
     * Transmit power in cdBm.
     */
    boolean hasTransmitPower();
    /**
     *
     * Transmit power in cdBm.
     */
    int getTransmitPower();

    // optional sint32 receive_sensitivity = 8;
    /**
     *
     * Receive sensitivity in cdBm.  If not specified, no RSSI
     * filtering is done.
     */
    boolean hasReceiveSensitivity();
    /**
     *
     * Receive sensitivity in cdBm.  If not specified, no RSSI
     * filtering is done.
     */
    int getReceiveSensitivity();

    // optional uint32 tag_population_estimate = 10 [default = 32];
    /**
     *
     * optional    bool                    tag_population_check
     * = 9 [default = true];
     */
    boolean hasTagPopulationEstimate();
    /**
     *
     * optional    bool                    tag_population_check
     * = 9 [default = true];
     */
    int getTagPopulationEstimate();

    // optional uint32 minimum_dwell_time = 11 [default = 0];
    /**
     *
     * Minimum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no minimum.
     */
    boolean hasMinimumDwellTime();
    /**
     *
     * Minimum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no minimum.
     */
    int getMinimumDwellTime();

    // optional uint32 maximum_dwell_time = 12 [default = 0];
    /**
     *
     * Maximum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no maximum.
     */
    boolean hasMaximumDwellTime();
    /**
     *
     * Maximum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no maximum.
     */
    int getMaximumDwellTime();

    // optional bool enable_query_for_q_increase = 13 [default = false];
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to increase the Q value during
     * the round.
     */
    boolean hasEnableQueryForQIncrease();
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to increase the Q value during
     * the round.
     */
    boolean getEnableQueryForQIncrease();

    // optional bool enable_query_for_q_decrease = 14 [default = false];
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to decrease the Q value during
     * the round.
     */
    boolean hasEnableQueryForQDecrease();
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to decrease the Q value during
     * the round.
     */
    boolean getEnableQueryForQDecrease();

    // optional bool enable_query_at_u_cycle_end = 15 [default = false];
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust for the flush queries at the end of the round.
     */
    boolean hasEnableQueryAtUCycleEnd();
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust for the flush queries at the end of the round.
     */
    boolean getEnableQueryAtUCycleEnd();

    // optional bool enable_adaptive_tag_population_estimate = 16 [default = false];
    /**
     *
     * Indicates whether the tag_population_estimate in the
     * AntennaConfig  should be updated with the actual number of
     * tags seen.
     */
    boolean hasEnableAdaptiveTagPopulationEstimate();
    /**
     *
     * Indicates whether the tag_population_estimate in the
     * AntennaConfig  should be updated with the actual number of
     * tags seen.
     */
    boolean getEnableAdaptiveTagPopulationEstimate();
  }
  /**
   * Protobuf type {@code Impinj.STP.AntennaConfig}
   *
   * An antenna's RF, timing, and Gen 2 behavior parameters.
   */
  public static final class AntennaConfig extends
      com.google.protobuf.GeneratedMessage
      implements AntennaConfigOrBuilder {
    // Use AntennaConfig.newBuilder() to construct.
    private AntennaConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AntennaConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AntennaConfig defaultInstance;
    public static AntennaConfig getDefaultInstance() {
      return defaultInstance;
    }

    public AntennaConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AntennaConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              antennaID_ = input.readUInt32();
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.Gen2Mode value = com.impinj.stp.StpApi.Gen2Mode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                gen2Mode_ = value;
              }
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.InventorySearchMode value = com.impinj.stp.StpApi.InventorySearchMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                inventorySearchMode_ = value;
              }
              break;
            }
            case 48: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.Gen2Session value = com.impinj.stp.StpApi.Gen2Session.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(6, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                gen2Session_ = value;
              }
              break;
            }
            case 56: {
              bitField0_ |= 0x00000010;
              transmitPower_ = input.readSInt32();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000020;
              receiveSensitivity_ = input.readSInt32();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000040;
              tagPopulationEstimate_ = input.readUInt32();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000080;
              minimumDwellTime_ = input.readUInt32();
              break;
            }
            case 96: {
              bitField0_ |= 0x00000100;
              maximumDwellTime_ = input.readUInt32();
              break;
            }
            case 104: {
              bitField0_ |= 0x00000200;
              enableQueryForQIncrease_ = input.readBool();
              break;
            }
            case 112: {
              bitField0_ |= 0x00000400;
              enableQueryForQDecrease_ = input.readBool();
              break;
            }
            case 120: {
              bitField0_ |= 0x00000800;
              enableQueryAtUCycleEnd_ = input.readBool();
              break;
            }
            case 128: {
              bitField0_ |= 0x00001000;
              enableAdaptiveTagPopulationEstimate_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennaConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennaConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AntennaConfig.class, com.impinj.stp.StpApi.AntennaConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<AntennaConfig> PARSER =
        new com.google.protobuf.AbstractParser<AntennaConfig>() {
      public AntennaConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AntennaConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AntennaConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required uint32 antenna_ID = 1;
    public static final int ANTENNA_ID_FIELD_NUMBER = 1;
    private int antennaID_;
    /**
     *
     * The 1-based ID of the reader antenna.
     */
    public boolean hasAntennaID() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * The 1-based ID of the reader antenna.
     */
    public int getAntennaID() {
      return antennaID_;
    }

    // optional .Impinj.STP.Gen2Mode gen2_mode = 4 [default = GEN2_MODE_MAX_THROUGHPUT];
    public static final int GEN2_MODE_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.Gen2Mode gen2Mode_;
    /**
     */
    public boolean hasGen2Mode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.Gen2Mode getGen2Mode() {
      return gen2Mode_;
    }

    // optional .Impinj.STP.InventorySearchMode inventory_search_mode = 5 [default = INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS];
    public static final int INVENTORY_SEARCH_MODE_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.InventorySearchMode inventorySearchMode_;
    /**
     */
    public boolean hasInventorySearchMode() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.InventorySearchMode getInventorySearchMode() {
      return inventorySearchMode_;
    }

    // optional .Impinj.STP.Gen2Session gen2_session = 6 [default = GEN2_SESSION_1];
    public static final int GEN2_SESSION_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.Gen2Session gen2Session_;
    /**
     */
    public boolean hasGen2Session() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.Gen2Session getGen2Session() {
      return gen2Session_;
    }

    // optional sint32 transmit_power = 7 [default = 3000];
    public static final int TRANSMIT_POWER_FIELD_NUMBER = 7;
    private int transmitPower_;
    /**
     *
     * Transmit power in cdBm.
     */
    public boolean hasTransmitPower() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * Transmit power in cdBm.
     */
    public int getTransmitPower() {
      return transmitPower_;
    }

    // optional sint32 receive_sensitivity = 8;
    public static final int RECEIVE_SENSITIVITY_FIELD_NUMBER = 8;
    private int receiveSensitivity_;
    /**
     *
     * Receive sensitivity in cdBm.  If not specified, no RSSI
     * filtering is done.
     */
    public boolean hasReceiveSensitivity() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * Receive sensitivity in cdBm.  If not specified, no RSSI
     * filtering is done.
     */
    public int getReceiveSensitivity() {
      return receiveSensitivity_;
    }

    // optional uint32 tag_population_estimate = 10 [default = 32];
    public static final int TAG_POPULATION_ESTIMATE_FIELD_NUMBER = 10;
    private int tagPopulationEstimate_;
    /**
     *
     * optional    bool                    tag_population_check
     * = 9 [default = true];
     */
    public boolean hasTagPopulationEstimate() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     *
     * optional    bool                    tag_population_check
     * = 9 [default = true];
     */
    public int getTagPopulationEstimate() {
      return tagPopulationEstimate_;
    }

    // optional uint32 minimum_dwell_time = 11 [default = 0];
    public static final int MINIMUM_DWELL_TIME_FIELD_NUMBER = 11;
    private int minimumDwellTime_;
    /**
     *
     * Minimum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no minimum.
     */
    public boolean hasMinimumDwellTime() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     *
     * Minimum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no minimum.
     */
    public int getMinimumDwellTime() {
      return minimumDwellTime_;
    }

    // optional uint32 maximum_dwell_time = 12 [default = 0];
    public static final int MAXIMUM_DWELL_TIME_FIELD_NUMBER = 12;
    private int maximumDwellTime_;
    /**
     *
     * Maximum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no maximum.
     */
    public boolean hasMaximumDwellTime() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     *
     * Maximum time to dwell on the antenna in milliseconds. A
     * value of 0 indicates no maximum.
     */
    public int getMaximumDwellTime() {
      return maximumDwellTime_;
    }

    // optional bool enable_query_for_q_increase = 13 [default = false];
    public static final int ENABLE_QUERY_FOR_Q_INCREASE_FIELD_NUMBER = 13;
    private boolean enableQueryForQIncrease_;
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to increase the Q value during
     * the round.
     */
    public boolean hasEnableQueryForQIncrease() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to increase the Q value during
     * the round.
     */
    public boolean getEnableQueryForQIncrease() {
      return enableQueryForQIncrease_;
    }

    // optional bool enable_query_for_q_decrease = 14 [default = false];
    public static final int ENABLE_QUERY_FOR_Q_DECREASE_FIELD_NUMBER = 14;
    private boolean enableQueryForQDecrease_;
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to decrease the Q value during
     * the round.
     */
    public boolean hasEnableQueryForQDecrease() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust when the reader wishes to decrease the Q value during
     * the round.
     */
    public boolean getEnableQueryForQDecrease() {
      return enableQueryForQDecrease_;
    }

    // optional bool enable_query_at_u_cycle_end = 15 [default = false];
    public static final int ENABLE_QUERY_AT_U_CYCLE_END_FIELD_NUMBER = 15;
    private boolean enableQueryAtUCycleEnd_;
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust for the flush queries at the end of the round.
     */
    public boolean hasEnableQueryAtUCycleEnd() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     *
     * Indicates whether a query should be used instead of a query
     * adjust for the flush queries at the end of the round.
     */
    public boolean getEnableQueryAtUCycleEnd() {
      return enableQueryAtUCycleEnd_;
    }

    // optional bool enable_adaptive_tag_population_estimate = 16 [default = false];
    public static final int ENABLE_ADAPTIVE_TAG_POPULATION_ESTIMATE_FIELD_NUMBER = 16;
    private boolean enableAdaptiveTagPopulationEstimate_;
    /**
     *
     * Indicates whether the tag_population_estimate in the
     * AntennaConfig  should be updated with the actual number of
     * tags seen.
     */
    public boolean hasEnableAdaptiveTagPopulationEstimate() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     *
     * Indicates whether the tag_population_estimate in the
     * AntennaConfig  should be updated with the actual number of
     * tags seen.
     */
    public boolean getEnableAdaptiveTagPopulationEstimate() {
      return enableAdaptiveTagPopulationEstimate_;
    }

    private void initFields() {
      antennaID_ = 0;
      gen2Mode_ = com.impinj.stp.StpApi.Gen2Mode.GEN2_MODE_MAX_THROUGHPUT;
      inventorySearchMode_ = com.impinj.stp.StpApi.InventorySearchMode.INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS;
      gen2Session_ = com.impinj.stp.StpApi.Gen2Session.GEN2_SESSION_1;
      transmitPower_ = 3000;
      receiveSensitivity_ = 0;
      tagPopulationEstimate_ = 32;
      minimumDwellTime_ = 0;
      maximumDwellTime_ = 0;
      enableQueryForQIncrease_ = false;
      enableQueryForQDecrease_ = false;
      enableQueryAtUCycleEnd_ = false;
      enableAdaptiveTagPopulationEstimate_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasAntennaID()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, antennaID_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(4, gen2Mode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(5, inventorySearchMode_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(6, gen2Session_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeSInt32(7, transmitPower_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeSInt32(8, receiveSensitivity_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeUInt32(10, tagPopulationEstimate_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeUInt32(11, minimumDwellTime_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeUInt32(12, maximumDwellTime_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBool(13, enableQueryForQIncrease_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBool(14, enableQueryForQDecrease_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBool(15, enableQueryAtUCycleEnd_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBool(16, enableAdaptiveTagPopulationEstimate_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, antennaID_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, gen2Mode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, inventorySearchMode_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(6, gen2Session_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(7, transmitPower_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(8, receiveSensitivity_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(10, tagPopulationEstimate_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(11, minimumDwellTime_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(12, maximumDwellTime_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, enableQueryForQIncrease_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(14, enableQueryForQDecrease_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(15, enableQueryAtUCycleEnd_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, enableAdaptiveTagPopulationEstimate_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AntennaConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AntennaConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AntennaConfig}
     *
     * An antenna's RF, timing, and Gen 2 behavior parameters.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AntennaConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennaConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennaConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AntennaConfig.class, com.impinj.stp.StpApi.AntennaConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AntennaConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        antennaID_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        gen2Mode_ = com.impinj.stp.StpApi.Gen2Mode.GEN2_MODE_MAX_THROUGHPUT;
        bitField0_ = (bitField0_ & ~0x00000002);
        inventorySearchMode_ = com.impinj.stp.StpApi.InventorySearchMode.INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS;
        bitField0_ = (bitField0_ & ~0x00000004);
        gen2Session_ = com.impinj.stp.StpApi.Gen2Session.GEN2_SESSION_1;
        bitField0_ = (bitField0_ & ~0x00000008);
        transmitPower_ = 3000;
        bitField0_ = (bitField0_ & ~0x00000010);
        receiveSensitivity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        tagPopulationEstimate_ = 32;
        bitField0_ = (bitField0_ & ~0x00000040);
        minimumDwellTime_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        maximumDwellTime_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        enableQueryForQIncrease_ = false;
        bitField0_ = (bitField0_ & ~0x00000200);
        enableQueryForQDecrease_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        enableQueryAtUCycleEnd_ = false;
        bitField0_ = (bitField0_ & ~0x00000800);
        enableAdaptiveTagPopulationEstimate_ = false;
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennaConfig_descriptor;
      }

      public com.impinj.stp.StpApi.AntennaConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AntennaConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AntennaConfig build() {
        com.impinj.stp.StpApi.AntennaConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AntennaConfig buildPartial() {
        com.impinj.stp.StpApi.AntennaConfig result = new com.impinj.stp.StpApi.AntennaConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.antennaID_ = antennaID_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gen2Mode_ = gen2Mode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.inventorySearchMode_ = inventorySearchMode_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.gen2Session_ = gen2Session_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.transmitPower_ = transmitPower_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.receiveSensitivity_ = receiveSensitivity_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.tagPopulationEstimate_ = tagPopulationEstimate_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.minimumDwellTime_ = minimumDwellTime_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.maximumDwellTime_ = maximumDwellTime_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.enableQueryForQIncrease_ = enableQueryForQIncrease_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.enableQueryForQDecrease_ = enableQueryForQDecrease_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.enableQueryAtUCycleEnd_ = enableQueryAtUCycleEnd_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.enableAdaptiveTagPopulationEstimate_ = enableAdaptiveTagPopulationEstimate_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AntennaConfig) {
          return mergeFrom((com.impinj.stp.StpApi.AntennaConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AntennaConfig other) {
        if (other == com.impinj.stp.StpApi.AntennaConfig.getDefaultInstance()) return this;
        if (other.hasAntennaID()) {
          setAntennaID(other.getAntennaID());
        }
        if (other.hasGen2Mode()) {
          setGen2Mode(other.getGen2Mode());
        }
        if (other.hasInventorySearchMode()) {
          setInventorySearchMode(other.getInventorySearchMode());
        }
        if (other.hasGen2Session()) {
          setGen2Session(other.getGen2Session());
        }
        if (other.hasTransmitPower()) {
          setTransmitPower(other.getTransmitPower());
        }
        if (other.hasReceiveSensitivity()) {
          setReceiveSensitivity(other.getReceiveSensitivity());
        }
        if (other.hasTagPopulationEstimate()) {
          setTagPopulationEstimate(other.getTagPopulationEstimate());
        }
        if (other.hasMinimumDwellTime()) {
          setMinimumDwellTime(other.getMinimumDwellTime());
        }
        if (other.hasMaximumDwellTime()) {
          setMaximumDwellTime(other.getMaximumDwellTime());
        }
        if (other.hasEnableQueryForQIncrease()) {
          setEnableQueryForQIncrease(other.getEnableQueryForQIncrease());
        }
        if (other.hasEnableQueryForQDecrease()) {
          setEnableQueryForQDecrease(other.getEnableQueryForQDecrease());
        }
        if (other.hasEnableQueryAtUCycleEnd()) {
          setEnableQueryAtUCycleEnd(other.getEnableQueryAtUCycleEnd());
        }
        if (other.hasEnableAdaptiveTagPopulationEstimate()) {
          setEnableAdaptiveTagPopulationEstimate(other.getEnableAdaptiveTagPopulationEstimate());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasAntennaID()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AntennaConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AntennaConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required uint32 antenna_ID = 1;
      private int antennaID_ ;
      /**
       *
       * The 1-based ID of the reader antenna.
       */
      public boolean hasAntennaID() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * The 1-based ID of the reader antenna.
       */
      public int getAntennaID() {
        return antennaID_;
      }
      /**
       *
       * The 1-based ID of the reader antenna.
       */
      public Builder setAntennaID(int value) {
        bitField0_ |= 0x00000001;
        antennaID_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The 1-based ID of the reader antenna.
       */
      public Builder clearAntennaID() {
        bitField0_ = (bitField0_ & ~0x00000001);
        antennaID_ = 0;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.Gen2Mode gen2_mode = 4 [default = GEN2_MODE_MAX_THROUGHPUT];
      private com.impinj.stp.StpApi.Gen2Mode gen2Mode_ = com.impinj.stp.StpApi.Gen2Mode.GEN2_MODE_MAX_THROUGHPUT;
      /**
       */
      public boolean hasGen2Mode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.Gen2Mode getGen2Mode() {
        return gen2Mode_;
      }
      /**
       */
      public Builder setGen2Mode(com.impinj.stp.StpApi.Gen2Mode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        gen2Mode_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearGen2Mode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gen2Mode_ = com.impinj.stp.StpApi.Gen2Mode.GEN2_MODE_MAX_THROUGHPUT;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.InventorySearchMode inventory_search_mode = 5 [default = INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS];
      private com.impinj.stp.StpApi.InventorySearchMode inventorySearchMode_ = com.impinj.stp.StpApi.InventorySearchMode.INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS;
      /**
       */
      public boolean hasInventorySearchMode() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.InventorySearchMode getInventorySearchMode() {
        return inventorySearchMode_;
      }
      /**
       */
      public Builder setInventorySearchMode(com.impinj.stp.StpApi.InventorySearchMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        inventorySearchMode_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearInventorySearchMode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        inventorySearchMode_ = com.impinj.stp.StpApi.InventorySearchMode.INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_TO_B_MONZA_TAGFOCUS;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.Gen2Session gen2_session = 6 [default = GEN2_SESSION_1];
      private com.impinj.stp.StpApi.Gen2Session gen2Session_ = com.impinj.stp.StpApi.Gen2Session.GEN2_SESSION_1;
      /**
       */
      public boolean hasGen2Session() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.Gen2Session getGen2Session() {
        return gen2Session_;
      }
      /**
       */
      public Builder setGen2Session(com.impinj.stp.StpApi.Gen2Session value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        gen2Session_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearGen2Session() {
        bitField0_ = (bitField0_ & ~0x00000008);
        gen2Session_ = com.impinj.stp.StpApi.Gen2Session.GEN2_SESSION_1;
        onChanged();
        return this;
      }

      // optional sint32 transmit_power = 7 [default = 3000];
      private int transmitPower_ = 3000;
      /**
       *
       * Transmit power in cdBm.
       */
      public boolean hasTransmitPower() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * Transmit power in cdBm.
       */
      public int getTransmitPower() {
        return transmitPower_;
      }
      /**
       *
       * Transmit power in cdBm.
       */
      public Builder setTransmitPower(int value) {
        bitField0_ |= 0x00000010;
        transmitPower_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Transmit power in cdBm.
       */
      public Builder clearTransmitPower() {
        bitField0_ = (bitField0_ & ~0x00000010);
        transmitPower_ = 3000;
        onChanged();
        return this;
      }

      // optional sint32 receive_sensitivity = 8;
      private int receiveSensitivity_ ;
      /**
       *
       * Receive sensitivity in cdBm.  If not specified, no RSSI
       * filtering is done.
       */
      public boolean hasReceiveSensitivity() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       *
       * Receive sensitivity in cdBm.  If not specified, no RSSI
       * filtering is done.
       */
      public int getReceiveSensitivity() {
        return receiveSensitivity_;
      }
      /**
       *
       * Receive sensitivity in cdBm.  If not specified, no RSSI
       * filtering is done.
       */
      public Builder setReceiveSensitivity(int value) {
        bitField0_ |= 0x00000020;
        receiveSensitivity_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Receive sensitivity in cdBm.  If not specified, no RSSI
       * filtering is done.
       */
      public Builder clearReceiveSensitivity() {
        bitField0_ = (bitField0_ & ~0x00000020);
        receiveSensitivity_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 tag_population_estimate = 10 [default = 32];
      private int tagPopulationEstimate_ = 32;
      /**
       *
       * optional    bool                    tag_population_check
       * = 9 [default = true];
       */
      public boolean hasTagPopulationEstimate() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       *
       * optional    bool                    tag_population_check
       * = 9 [default = true];
       */
      public int getTagPopulationEstimate() {
        return tagPopulationEstimate_;
      }
      /**
       *
       * optional    bool                    tag_population_check
       * = 9 [default = true];
       */
      public Builder setTagPopulationEstimate(int value) {
        bitField0_ |= 0x00000040;
        tagPopulationEstimate_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * optional    bool                    tag_population_check
       * = 9 [default = true];
       */
      public Builder clearTagPopulationEstimate() {
        bitField0_ = (bitField0_ & ~0x00000040);
        tagPopulationEstimate_ = 32;
        onChanged();
        return this;
      }

      // optional uint32 minimum_dwell_time = 11 [default = 0];
      private int minimumDwellTime_ ;
      /**
       *
       * Minimum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no minimum.
       */
      public boolean hasMinimumDwellTime() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       *
       * Minimum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no minimum.
       */
      public int getMinimumDwellTime() {
        return minimumDwellTime_;
      }
      /**
       *
       * Minimum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no minimum.
       */
      public Builder setMinimumDwellTime(int value) {
        bitField0_ |= 0x00000080;
        minimumDwellTime_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Minimum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no minimum.
       */
      public Builder clearMinimumDwellTime() {
        bitField0_ = (bitField0_ & ~0x00000080);
        minimumDwellTime_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 maximum_dwell_time = 12 [default = 0];
      private int maximumDwellTime_ ;
      /**
       *
       * Maximum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no maximum.
       */
      public boolean hasMaximumDwellTime() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       *
       * Maximum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no maximum.
       */
      public int getMaximumDwellTime() {
        return maximumDwellTime_;
      }
      /**
       *
       * Maximum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no maximum.
       */
      public Builder setMaximumDwellTime(int value) {
        bitField0_ |= 0x00000100;
        maximumDwellTime_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Maximum time to dwell on the antenna in milliseconds. A
       * value of 0 indicates no maximum.
       */
      public Builder clearMaximumDwellTime() {
        bitField0_ = (bitField0_ & ~0x00000100);
        maximumDwellTime_ = 0;
        onChanged();
        return this;
      }

      // optional bool enable_query_for_q_increase = 13 [default = false];
      private boolean enableQueryForQIncrease_ ;
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to increase the Q value during
       * the round.
       */
      public boolean hasEnableQueryForQIncrease() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to increase the Q value during
       * the round.
       */
      public boolean getEnableQueryForQIncrease() {
        return enableQueryForQIncrease_;
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to increase the Q value during
       * the round.
       */
      public Builder setEnableQueryForQIncrease(boolean value) {
        bitField0_ |= 0x00000200;
        enableQueryForQIncrease_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to increase the Q value during
       * the round.
       */
      public Builder clearEnableQueryForQIncrease() {
        bitField0_ = (bitField0_ & ~0x00000200);
        enableQueryForQIncrease_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_query_for_q_decrease = 14 [default = false];
      private boolean enableQueryForQDecrease_ ;
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to decrease the Q value during
       * the round.
       */
      public boolean hasEnableQueryForQDecrease() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to decrease the Q value during
       * the round.
       */
      public boolean getEnableQueryForQDecrease() {
        return enableQueryForQDecrease_;
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to decrease the Q value during
       * the round.
       */
      public Builder setEnableQueryForQDecrease(boolean value) {
        bitField0_ |= 0x00000400;
        enableQueryForQDecrease_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust when the reader wishes to decrease the Q value during
       * the round.
       */
      public Builder clearEnableQueryForQDecrease() {
        bitField0_ = (bitField0_ & ~0x00000400);
        enableQueryForQDecrease_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_query_at_u_cycle_end = 15 [default = false];
      private boolean enableQueryAtUCycleEnd_ ;
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust for the flush queries at the end of the round.
       */
      public boolean hasEnableQueryAtUCycleEnd() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust for the flush queries at the end of the round.
       */
      public boolean getEnableQueryAtUCycleEnd() {
        return enableQueryAtUCycleEnd_;
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust for the flush queries at the end of the round.
       */
      public Builder setEnableQueryAtUCycleEnd(boolean value) {
        bitField0_ |= 0x00000800;
        enableQueryAtUCycleEnd_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Indicates whether a query should be used instead of a query
       * adjust for the flush queries at the end of the round.
       */
      public Builder clearEnableQueryAtUCycleEnd() {
        bitField0_ = (bitField0_ & ~0x00000800);
        enableQueryAtUCycleEnd_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_adaptive_tag_population_estimate = 16 [default = false];
      private boolean enableAdaptiveTagPopulationEstimate_ ;
      /**
       *
       * Indicates whether the tag_population_estimate in the
       * AntennaConfig  should be updated with the actual number of
       * tags seen.
       */
      public boolean hasEnableAdaptiveTagPopulationEstimate() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       *
       * Indicates whether the tag_population_estimate in the
       * AntennaConfig  should be updated with the actual number of
       * tags seen.
       */
      public boolean getEnableAdaptiveTagPopulationEstimate() {
        return enableAdaptiveTagPopulationEstimate_;
      }
      /**
       *
       * Indicates whether the tag_population_estimate in the
       * AntennaConfig  should be updated with the actual number of
       * tags seen.
       */
      public Builder setEnableAdaptiveTagPopulationEstimate(boolean value) {
        bitField0_ |= 0x00001000;
        enableAdaptiveTagPopulationEstimate_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Indicates whether the tag_population_estimate in the
       * AntennaConfig  should be updated with the actual number of
       * tags seen.
       */
      public Builder clearEnableAdaptiveTagPopulationEstimate() {
        bitField0_ = (bitField0_ & ~0x00001000);
        enableAdaptiveTagPopulationEstimate_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AntennaConfig)
    }

    static {
      defaultInstance = new AntennaConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AntennaConfig)
  }

  public interface AntennasConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .Impinj.STP.AntennaConfig antenna_config = 1;
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    java.util.List<com.impinj.stp.StpApi.AntennaConfig> 
        getAntennaConfigList();
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    com.impinj.stp.StpApi.AntennaConfig getAntennaConfig(int index);
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    int getAntennaConfigCount();
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    java.util.List<? extends com.impinj.stp.StpApi.AntennaConfigOrBuilder> 
        getAntennaConfigOrBuilderList();
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    com.impinj.stp.StpApi.AntennaConfigOrBuilder getAntennaConfigOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code Impinj.STP.AntennasConfig}
   *
   * A list of antenna configurations.
   */
  public static final class AntennasConfig extends
      com.google.protobuf.GeneratedMessage
      implements AntennasConfigOrBuilder {
    // Use AntennasConfig.newBuilder() to construct.
    private AntennasConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AntennasConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AntennasConfig defaultInstance;
    public static AntennasConfig getDefaultInstance() {
      return defaultInstance;
    }

    public AntennasConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AntennasConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                antennaConfig_ = new java.util.ArrayList<com.impinj.stp.StpApi.AntennaConfig>();
                mutable_bitField0_ |= 0x00000001;
              }
              antennaConfig_.add(input.readMessage(com.impinj.stp.StpApi.AntennaConfig.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          antennaConfig_ = java.util.Collections.unmodifiableList(antennaConfig_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennasConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennasConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AntennasConfig.class, com.impinj.stp.StpApi.AntennasConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<AntennasConfig> PARSER =
        new com.google.protobuf.AbstractParser<AntennasConfig>() {
      public AntennasConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AntennasConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AntennasConfig> getParserForType() {
      return PARSER;
    }

    // repeated .Impinj.STP.AntennaConfig antenna_config = 1;
    public static final int ANTENNA_CONFIG_FIELD_NUMBER = 1;
    private java.util.List<com.impinj.stp.StpApi.AntennaConfig> antennaConfig_;
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    public java.util.List<com.impinj.stp.StpApi.AntennaConfig> getAntennaConfigList() {
      return antennaConfig_;
    }
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    public java.util.List<? extends com.impinj.stp.StpApi.AntennaConfigOrBuilder> 
        getAntennaConfigOrBuilderList() {
      return antennaConfig_;
    }
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    public int getAntennaConfigCount() {
      return antennaConfig_.size();
    }
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    public com.impinj.stp.StpApi.AntennaConfig getAntennaConfig(int index) {
      return antennaConfig_.get(index);
    }
    /**
     *
     * The device will cycle through the configurations in the
     * order in which they appear in the list.  The amount of time
     * spent on each antenna is determined by the reader, but
     * constrained by the minimum_dwell_time and maximum_dwell_time
     * if those parameters are set. It is valid to provide multiple
     * AntennaConfig messages that contain the same antenna_id in
     * which case they will simply be treated as independent
     * AntennaConfig entries.
     */
    public com.impinj.stp.StpApi.AntennaConfigOrBuilder getAntennaConfigOrBuilder(
        int index) {
      return antennaConfig_.get(index);
    }

    private void initFields() {
      antennaConfig_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      for (int i = 0; i < getAntennaConfigCount(); i++) {
        if (!getAntennaConfig(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < antennaConfig_.size(); i++) {
        output.writeMessage(1, antennaConfig_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < antennaConfig_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, antennaConfig_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AntennasConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AntennasConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AntennasConfig}
     *
     * A list of antenna configurations.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AntennasConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennasConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennasConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AntennasConfig.class, com.impinj.stp.StpApi.AntennasConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AntennasConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAntennaConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (antennaConfigBuilder_ == null) {
          antennaConfig_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          antennaConfigBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AntennasConfig_descriptor;
      }

      public com.impinj.stp.StpApi.AntennasConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AntennasConfig build() {
        com.impinj.stp.StpApi.AntennasConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AntennasConfig buildPartial() {
        com.impinj.stp.StpApi.AntennasConfig result = new com.impinj.stp.StpApi.AntennasConfig(this);
        int from_bitField0_ = bitField0_;
        if (antennaConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            antennaConfig_ = java.util.Collections.unmodifiableList(antennaConfig_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.antennaConfig_ = antennaConfig_;
        } else {
          result.antennaConfig_ = antennaConfigBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AntennasConfig) {
          return mergeFrom((com.impinj.stp.StpApi.AntennasConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AntennasConfig other) {
        if (other == com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance()) return this;
        if (antennaConfigBuilder_ == null) {
          if (!other.antennaConfig_.isEmpty()) {
            if (antennaConfig_.isEmpty()) {
              antennaConfig_ = other.antennaConfig_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureAntennaConfigIsMutable();
              antennaConfig_.addAll(other.antennaConfig_);
            }
            onChanged();
          }
        } else {
          if (!other.antennaConfig_.isEmpty()) {
            if (antennaConfigBuilder_.isEmpty()) {
              antennaConfigBuilder_.dispose();
              antennaConfigBuilder_ = null;
              antennaConfig_ = other.antennaConfig_;
              bitField0_ = (bitField0_ & ~0x00000001);
              antennaConfigBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAntennaConfigFieldBuilder() : null;
            } else {
              antennaConfigBuilder_.addAllMessages(other.antennaConfig_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getAntennaConfigCount(); i++) {
          if (!getAntennaConfig(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AntennasConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AntennasConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .Impinj.STP.AntennaConfig antenna_config = 1;
      private java.util.List<com.impinj.stp.StpApi.AntennaConfig> antennaConfig_ =
        java.util.Collections.emptyList();
      private void ensureAntennaConfigIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          antennaConfig_ = new java.util.ArrayList<com.impinj.stp.StpApi.AntennaConfig>(antennaConfig_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.AntennaConfig, com.impinj.stp.StpApi.AntennaConfig.Builder, com.impinj.stp.StpApi.AntennaConfigOrBuilder> antennaConfigBuilder_;

      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public java.util.List<com.impinj.stp.StpApi.AntennaConfig> getAntennaConfigList() {
        if (antennaConfigBuilder_ == null) {
          return java.util.Collections.unmodifiableList(antennaConfig_);
        } else {
          return antennaConfigBuilder_.getMessageList();
        }
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public int getAntennaConfigCount() {
        if (antennaConfigBuilder_ == null) {
          return antennaConfig_.size();
        } else {
          return antennaConfigBuilder_.getCount();
        }
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public com.impinj.stp.StpApi.AntennaConfig getAntennaConfig(int index) {
        if (antennaConfigBuilder_ == null) {
          return antennaConfig_.get(index);
        } else {
          return antennaConfigBuilder_.getMessage(index);
        }
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder setAntennaConfig(
          int index, com.impinj.stp.StpApi.AntennaConfig value) {
        if (antennaConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAntennaConfigIsMutable();
          antennaConfig_.set(index, value);
          onChanged();
        } else {
          antennaConfigBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder setAntennaConfig(
          int index, com.impinj.stp.StpApi.AntennaConfig.Builder builderForValue) {
        if (antennaConfigBuilder_ == null) {
          ensureAntennaConfigIsMutable();
          antennaConfig_.set(index, builderForValue.build());
          onChanged();
        } else {
          antennaConfigBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder addAntennaConfig(com.impinj.stp.StpApi.AntennaConfig value) {
        if (antennaConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAntennaConfigIsMutable();
          antennaConfig_.add(value);
          onChanged();
        } else {
          antennaConfigBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder addAntennaConfig(
          int index, com.impinj.stp.StpApi.AntennaConfig value) {
        if (antennaConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAntennaConfigIsMutable();
          antennaConfig_.add(index, value);
          onChanged();
        } else {
          antennaConfigBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder addAntennaConfig(
          com.impinj.stp.StpApi.AntennaConfig.Builder builderForValue) {
        if (antennaConfigBuilder_ == null) {
          ensureAntennaConfigIsMutable();
          antennaConfig_.add(builderForValue.build());
          onChanged();
        } else {
          antennaConfigBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder addAntennaConfig(
          int index, com.impinj.stp.StpApi.AntennaConfig.Builder builderForValue) {
        if (antennaConfigBuilder_ == null) {
          ensureAntennaConfigIsMutable();
          antennaConfig_.add(index, builderForValue.build());
          onChanged();
        } else {
          antennaConfigBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder addAllAntennaConfig(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.AntennaConfig> values) {
        if (antennaConfigBuilder_ == null) {
          ensureAntennaConfigIsMutable();
          super.addAll(values, antennaConfig_);
          onChanged();
        } else {
          antennaConfigBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder clearAntennaConfig() {
        if (antennaConfigBuilder_ == null) {
          antennaConfig_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          antennaConfigBuilder_.clear();
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public Builder removeAntennaConfig(int index) {
        if (antennaConfigBuilder_ == null) {
          ensureAntennaConfigIsMutable();
          antennaConfig_.remove(index);
          onChanged();
        } else {
          antennaConfigBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public com.impinj.stp.StpApi.AntennaConfig.Builder getAntennaConfigBuilder(
          int index) {
        return getAntennaConfigFieldBuilder().getBuilder(index);
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public com.impinj.stp.StpApi.AntennaConfigOrBuilder getAntennaConfigOrBuilder(
          int index) {
        if (antennaConfigBuilder_ == null) {
          return antennaConfig_.get(index);  } else {
          return antennaConfigBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public java.util.List<? extends com.impinj.stp.StpApi.AntennaConfigOrBuilder> 
           getAntennaConfigOrBuilderList() {
        if (antennaConfigBuilder_ != null) {
          return antennaConfigBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(antennaConfig_);
        }
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public com.impinj.stp.StpApi.AntennaConfig.Builder addAntennaConfigBuilder() {
        return getAntennaConfigFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.AntennaConfig.getDefaultInstance());
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public com.impinj.stp.StpApi.AntennaConfig.Builder addAntennaConfigBuilder(
          int index) {
        return getAntennaConfigFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.AntennaConfig.getDefaultInstance());
      }
      /**
       *
       * The device will cycle through the configurations in the
       * order in which they appear in the list.  The amount of time
       * spent on each antenna is determined by the reader, but
       * constrained by the minimum_dwell_time and maximum_dwell_time
       * if those parameters are set. It is valid to provide multiple
       * AntennaConfig messages that contain the same antenna_id in
       * which case they will simply be treated as independent
       * AntennaConfig entries.
       */
      public java.util.List<com.impinj.stp.StpApi.AntennaConfig.Builder> 
           getAntennaConfigBuilderList() {
        return getAntennaConfigFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.AntennaConfig, com.impinj.stp.StpApi.AntennaConfig.Builder, com.impinj.stp.StpApi.AntennaConfigOrBuilder> 
          getAntennaConfigFieldBuilder() {
        if (antennaConfigBuilder_ == null) {
          antennaConfigBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.AntennaConfig, com.impinj.stp.StpApi.AntennaConfig.Builder, com.impinj.stp.StpApi.AntennaConfigOrBuilder>(
                  antennaConfig_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          antennaConfig_ = null;
        }
        return antennaConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AntennasConfig)
    }

    static {
      defaultInstance = new AntennasConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AntennasConfig)
  }

  public interface InventoryJobOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint32 job_id = 1 [default = 1];
    /**
     */
    boolean hasJobId();
    /**
     */
    int getJobId();

    // optional .Impinj.STP.UserMemory user_memory = 2;
    /**
     */
    boolean hasUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemory getUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.InventoryJob}
   *
   * What to report during an inventory.
   */
  public static final class InventoryJob extends
      com.google.protobuf.GeneratedMessage
      implements InventoryJobOrBuilder {
    // Use InventoryJob.newBuilder() to construct.
    private InventoryJob(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InventoryJob(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final InventoryJob defaultInstance;
    public static InventoryJob getDefaultInstance() {
      return defaultInstance;
    }

    public InventoryJob getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InventoryJob(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              jobId_ = input.readUInt32();
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.UserMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = userMemory_.toBuilder();
              }
              userMemory_ = input.readMessage(com.impinj.stp.StpApi.UserMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(userMemory_);
                userMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_InventoryJob_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_InventoryJob_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.InventoryJob.class, com.impinj.stp.StpApi.InventoryJob.Builder.class);
    }

    public static com.google.protobuf.Parser<InventoryJob> PARSER =
        new com.google.protobuf.AbstractParser<InventoryJob>() {
      public InventoryJob parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InventoryJob(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<InventoryJob> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional uint32 job_id = 1 [default = 1];
    public static final int JOB_ID_FIELD_NUMBER = 1;
    private int jobId_;
    /**
     */
    public boolean hasJobId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public int getJobId() {
      return jobId_;
    }

    // optional .Impinj.STP.UserMemory user_memory = 2;
    public static final int USER_MEMORY_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.UserMemory userMemory_;
    /**
     */
    public boolean hasUserMemory() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemory getUserMemory() {
      return userMemory_;
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
      return userMemory_;
    }

    private void initFields() {
      jobId_ = 1;
      userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, jobId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, userMemory_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, jobId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, userMemory_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.InventoryJob parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.InventoryJob parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.InventoryJob prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.InventoryJob}
     *
     * What to report during an inventory.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.InventoryJobOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InventoryJob_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InventoryJob_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.InventoryJob.class, com.impinj.stp.StpApi.InventoryJob.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.InventoryJob.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUserMemoryFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        jobId_ = 1;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InventoryJob_descriptor;
      }

      public com.impinj.stp.StpApi.InventoryJob getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.InventoryJob.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.InventoryJob build() {
        com.impinj.stp.StpApi.InventoryJob result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.InventoryJob buildPartial() {
        com.impinj.stp.StpApi.InventoryJob result = new com.impinj.stp.StpApi.InventoryJob(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.jobId_ = jobId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (userMemoryBuilder_ == null) {
          result.userMemory_ = userMemory_;
        } else {
          result.userMemory_ = userMemoryBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.InventoryJob) {
          return mergeFrom((com.impinj.stp.StpApi.InventoryJob)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.InventoryJob other) {
        if (other == com.impinj.stp.StpApi.InventoryJob.getDefaultInstance()) return this;
        if (other.hasJobId()) {
          setJobId(other.getJobId());
        }
        if (other.hasUserMemory()) {
          mergeUserMemory(other.getUserMemory());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.InventoryJob parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.InventoryJob) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint32 job_id = 1 [default = 1];
      private int jobId_ = 1;
      /**
       */
      public boolean hasJobId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public int getJobId() {
        return jobId_;
      }
      /**
       */
      public Builder setJobId(int value) {
        bitField0_ |= 0x00000001;
        jobId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearJobId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        jobId_ = 1;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.UserMemory user_memory = 2;
      private com.impinj.stp.StpApi.UserMemory userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> userMemoryBuilder_;
      /**
       */
      public boolean hasUserMemory() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory getUserMemory() {
        if (userMemoryBuilder_ == null) {
          return userMemory_;
        } else {
          return userMemoryBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          userMemory_ = value;
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setUserMemory(
          com.impinj.stp.StpApi.UserMemory.Builder builderForValue) {
        if (userMemoryBuilder_ == null) {
          userMemory_ = builderForValue.build();
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              userMemory_ != com.impinj.stp.StpApi.UserMemory.getDefaultInstance()) {
            userMemory_ =
              com.impinj.stp.StpApi.UserMemory.newBuilder(userMemory_).mergeFrom(value).buildPartial();
          } else {
            userMemory_ = value;
          }
          onChanged();
        } else {
          userMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearUserMemory() {
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
          onChanged();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory.Builder getUserMemoryBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getUserMemoryFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
        if (userMemoryBuilder_ != null) {
          return userMemoryBuilder_.getMessageOrBuilder();
        } else {
          return userMemory_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> 
          getUserMemoryFieldBuilder() {
        if (userMemoryBuilder_ == null) {
          userMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder>(
                  userMemory_,
                  getParentForChildren(),
                  isClean());
          userMemory_ = null;
        }
        return userMemoryBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.InventoryJob)
    }

    static {
      defaultInstance = new InventoryJob(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.InventoryJob)
  }

  public interface CartonContentsJobOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint32 job_id = 1 [default = 1];
    /**
     */
    boolean hasJobId();
    /**
     */
    int getJobId();

    // optional uint32 enter_trigger_offset = 6;
    /**
     *
     * Distance in millimeters from the enter trigger to the center
     * of the tunnel
     */
    boolean hasEnterTriggerOffset();
    /**
     *
     * Distance in millimeters from the enter trigger to the center
     * of the tunnel
     */
    int getEnterTriggerOffset();

    // optional uint32 exit_trigger_offset = 7;
    /**
     *
     * Distance in millimeters from the exit trigger to the center
     * of the tunnel
     */
    boolean hasExitTriggerOffset();
    /**
     *
     * Distance in millimeters from the exit trigger to the center
     * of the tunnel
     */
    int getExitTriggerOffset();

    // optional uint32 carton_velocity = 4;
    /**
     *
     * Speed of the cartons measured in millimeters / second
     */
    boolean hasCartonVelocity();
    /**
     *
     * Speed of the cartons measured in millimeters / second
     */
    int getCartonVelocity();

    // optional bool read_tid = 8 [default = true];
    /**
     *
     * Setting to false disables reading the TID. This can improve
     * overall carton accuracy.
     */
    boolean hasReadTid();
    /**
     *
     * Setting to false disables reading the TID. This can improve
     * overall carton accuracy.
     */
    boolean getReadTid();

    // optional uint32 carton_spacing = 5;
    /**
     *
     * DEPRECATED
     */
    boolean hasCartonSpacing();
    /**
     *
     * DEPRECATED
     */
    int getCartonSpacing();

    // optional uint32 start_trigger_offset = 2;
    /**
     *
     * DEPRECATED
     */
    boolean hasStartTriggerOffset();
    /**
     *
     * DEPRECATED
     */
    int getStartTriggerOffset();

    // optional uint32 stop_trigger_offset = 3;
    /**
     *
     * DEPRECATED
     */
    boolean hasStopTriggerOffset();
    /**
     *
     * DEPRECATED
     */
    int getStopTriggerOffset();
  }
  /**
   * Protobuf type {@code Impinj.STP.CartonContentsJob}
   *
   * A Carton contents job is what you use to provide you with an
   * estimate of what tags are in a given carton
   */
  public static final class CartonContentsJob extends
      com.google.protobuf.GeneratedMessage
      implements CartonContentsJobOrBuilder {
    // Use CartonContentsJob.newBuilder() to construct.
    private CartonContentsJob(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CartonContentsJob(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final CartonContentsJob defaultInstance;
    public static CartonContentsJob getDefaultInstance() {
      return defaultInstance;
    }

    public CartonContentsJob getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CartonContentsJob(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              jobId_ = input.readUInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000040;
              startTriggerOffset_ = input.readUInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000080;
              stopTriggerOffset_ = input.readUInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              cartonVelocity_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000020;
              cartonSpacing_ = input.readUInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000002;
              enterTriggerOffset_ = input.readUInt32();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000004;
              exitTriggerOffset_ = input.readUInt32();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000010;
              readTid_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsJob_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsJob_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.CartonContentsJob.class, com.impinj.stp.StpApi.CartonContentsJob.Builder.class);
    }

    public static com.google.protobuf.Parser<CartonContentsJob> PARSER =
        new com.google.protobuf.AbstractParser<CartonContentsJob>() {
      public CartonContentsJob parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CartonContentsJob(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<CartonContentsJob> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional uint32 job_id = 1 [default = 1];
    public static final int JOB_ID_FIELD_NUMBER = 1;
    private int jobId_;
    /**
     */
    public boolean hasJobId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public int getJobId() {
      return jobId_;
    }

    // optional uint32 enter_trigger_offset = 6;
    public static final int ENTER_TRIGGER_OFFSET_FIELD_NUMBER = 6;
    private int enterTriggerOffset_;
    /**
     *
     * Distance in millimeters from the enter trigger to the center
     * of the tunnel
     */
    public boolean hasEnterTriggerOffset() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Distance in millimeters from the enter trigger to the center
     * of the tunnel
     */
    public int getEnterTriggerOffset() {
      return enterTriggerOffset_;
    }

    // optional uint32 exit_trigger_offset = 7;
    public static final int EXIT_TRIGGER_OFFSET_FIELD_NUMBER = 7;
    private int exitTriggerOffset_;
    /**
     *
     * Distance in millimeters from the exit trigger to the center
     * of the tunnel
     */
    public boolean hasExitTriggerOffset() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Distance in millimeters from the exit trigger to the center
     * of the tunnel
     */
    public int getExitTriggerOffset() {
      return exitTriggerOffset_;
    }

    // optional uint32 carton_velocity = 4;
    public static final int CARTON_VELOCITY_FIELD_NUMBER = 4;
    private int cartonVelocity_;
    /**
     *
     * Speed of the cartons measured in millimeters / second
     */
    public boolean hasCartonVelocity() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Speed of the cartons measured in millimeters / second
     */
    public int getCartonVelocity() {
      return cartonVelocity_;
    }

    // optional bool read_tid = 8 [default = true];
    public static final int READ_TID_FIELD_NUMBER = 8;
    private boolean readTid_;
    /**
     *
     * Setting to false disables reading the TID. This can improve
     * overall carton accuracy.
     */
    public boolean hasReadTid() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * Setting to false disables reading the TID. This can improve
     * overall carton accuracy.
     */
    public boolean getReadTid() {
      return readTid_;
    }

    // optional uint32 carton_spacing = 5;
    public static final int CARTON_SPACING_FIELD_NUMBER = 5;
    private int cartonSpacing_;
    /**
     *
     * DEPRECATED
     */
    public boolean hasCartonSpacing() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * DEPRECATED
     */
    public int getCartonSpacing() {
      return cartonSpacing_;
    }

    // optional uint32 start_trigger_offset = 2;
    public static final int START_TRIGGER_OFFSET_FIELD_NUMBER = 2;
    private int startTriggerOffset_;
    /**
     *
     * DEPRECATED
     */
    public boolean hasStartTriggerOffset() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     *
     * DEPRECATED
     */
    public int getStartTriggerOffset() {
      return startTriggerOffset_;
    }

    // optional uint32 stop_trigger_offset = 3;
    public static final int STOP_TRIGGER_OFFSET_FIELD_NUMBER = 3;
    private int stopTriggerOffset_;
    /**
     *
     * DEPRECATED
     */
    public boolean hasStopTriggerOffset() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     *
     * DEPRECATED
     */
    public int getStopTriggerOffset() {
      return stopTriggerOffset_;
    }

    private void initFields() {
      jobId_ = 1;
      enterTriggerOffset_ = 0;
      exitTriggerOffset_ = 0;
      cartonVelocity_ = 0;
      readTid_ = true;
      cartonSpacing_ = 0;
      startTriggerOffset_ = 0;
      stopTriggerOffset_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, jobId_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeUInt32(2, startTriggerOffset_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeUInt32(3, stopTriggerOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, cartonVelocity_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt32(5, cartonSpacing_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(6, enterTriggerOffset_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(7, exitTriggerOffset_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(8, readTid_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, jobId_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, startTriggerOffset_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, stopTriggerOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, cartonVelocity_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, cartonSpacing_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, enterTriggerOffset_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, exitTriggerOffset_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, readTid_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsJob parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.CartonContentsJob prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.CartonContentsJob}
     *
     * A Carton contents job is what you use to provide you with an
     * estimate of what tags are in a given carton
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.CartonContentsJobOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsJob_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsJob_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.CartonContentsJob.class, com.impinj.stp.StpApi.CartonContentsJob.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.CartonContentsJob.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        jobId_ = 1;
        bitField0_ = (bitField0_ & ~0x00000001);
        enterTriggerOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        exitTriggerOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        cartonVelocity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        readTid_ = true;
        bitField0_ = (bitField0_ & ~0x00000010);
        cartonSpacing_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        startTriggerOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        stopTriggerOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsJob_descriptor;
      }

      public com.impinj.stp.StpApi.CartonContentsJob getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.CartonContentsJob.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.CartonContentsJob build() {
        com.impinj.stp.StpApi.CartonContentsJob result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.CartonContentsJob buildPartial() {
        com.impinj.stp.StpApi.CartonContentsJob result = new com.impinj.stp.StpApi.CartonContentsJob(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.jobId_ = jobId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.enterTriggerOffset_ = enterTriggerOffset_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.exitTriggerOffset_ = exitTriggerOffset_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.cartonVelocity_ = cartonVelocity_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.readTid_ = readTid_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.cartonSpacing_ = cartonSpacing_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.startTriggerOffset_ = startTriggerOffset_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.stopTriggerOffset_ = stopTriggerOffset_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.CartonContentsJob) {
          return mergeFrom((com.impinj.stp.StpApi.CartonContentsJob)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.CartonContentsJob other) {
        if (other == com.impinj.stp.StpApi.CartonContentsJob.getDefaultInstance()) return this;
        if (other.hasJobId()) {
          setJobId(other.getJobId());
        }
        if (other.hasEnterTriggerOffset()) {
          setEnterTriggerOffset(other.getEnterTriggerOffset());
        }
        if (other.hasExitTriggerOffset()) {
          setExitTriggerOffset(other.getExitTriggerOffset());
        }
        if (other.hasCartonVelocity()) {
          setCartonVelocity(other.getCartonVelocity());
        }
        if (other.hasReadTid()) {
          setReadTid(other.getReadTid());
        }
        if (other.hasCartonSpacing()) {
          setCartonSpacing(other.getCartonSpacing());
        }
        if (other.hasStartTriggerOffset()) {
          setStartTriggerOffset(other.getStartTriggerOffset());
        }
        if (other.hasStopTriggerOffset()) {
          setStopTriggerOffset(other.getStopTriggerOffset());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.CartonContentsJob parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.CartonContentsJob) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint32 job_id = 1 [default = 1];
      private int jobId_ = 1;
      /**
       */
      public boolean hasJobId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public int getJobId() {
        return jobId_;
      }
      /**
       */
      public Builder setJobId(int value) {
        bitField0_ |= 0x00000001;
        jobId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearJobId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        jobId_ = 1;
        onChanged();
        return this;
      }

      // optional uint32 enter_trigger_offset = 6;
      private int enterTriggerOffset_ ;
      /**
       *
       * Distance in millimeters from the enter trigger to the center
       * of the tunnel
       */
      public boolean hasEnterTriggerOffset() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Distance in millimeters from the enter trigger to the center
       * of the tunnel
       */
      public int getEnterTriggerOffset() {
        return enterTriggerOffset_;
      }
      /**
       *
       * Distance in millimeters from the enter trigger to the center
       * of the tunnel
       */
      public Builder setEnterTriggerOffset(int value) {
        bitField0_ |= 0x00000002;
        enterTriggerOffset_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Distance in millimeters from the enter trigger to the center
       * of the tunnel
       */
      public Builder clearEnterTriggerOffset() {
        bitField0_ = (bitField0_ & ~0x00000002);
        enterTriggerOffset_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 exit_trigger_offset = 7;
      private int exitTriggerOffset_ ;
      /**
       *
       * Distance in millimeters from the exit trigger to the center
       * of the tunnel
       */
      public boolean hasExitTriggerOffset() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Distance in millimeters from the exit trigger to the center
       * of the tunnel
       */
      public int getExitTriggerOffset() {
        return exitTriggerOffset_;
      }
      /**
       *
       * Distance in millimeters from the exit trigger to the center
       * of the tunnel
       */
      public Builder setExitTriggerOffset(int value) {
        bitField0_ |= 0x00000004;
        exitTriggerOffset_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Distance in millimeters from the exit trigger to the center
       * of the tunnel
       */
      public Builder clearExitTriggerOffset() {
        bitField0_ = (bitField0_ & ~0x00000004);
        exitTriggerOffset_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 carton_velocity = 4;
      private int cartonVelocity_ ;
      /**
       *
       * Speed of the cartons measured in millimeters / second
       */
      public boolean hasCartonVelocity() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Speed of the cartons measured in millimeters / second
       */
      public int getCartonVelocity() {
        return cartonVelocity_;
      }
      /**
       *
       * Speed of the cartons measured in millimeters / second
       */
      public Builder setCartonVelocity(int value) {
        bitField0_ |= 0x00000008;
        cartonVelocity_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Speed of the cartons measured in millimeters / second
       */
      public Builder clearCartonVelocity() {
        bitField0_ = (bitField0_ & ~0x00000008);
        cartonVelocity_ = 0;
        onChanged();
        return this;
      }

      // optional bool read_tid = 8 [default = true];
      private boolean readTid_ = true;
      /**
       *
       * Setting to false disables reading the TID. This can improve
       * overall carton accuracy.
       */
      public boolean hasReadTid() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * Setting to false disables reading the TID. This can improve
       * overall carton accuracy.
       */
      public boolean getReadTid() {
        return readTid_;
      }
      /**
       *
       * Setting to false disables reading the TID. This can improve
       * overall carton accuracy.
       */
      public Builder setReadTid(boolean value) {
        bitField0_ |= 0x00000010;
        readTid_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Setting to false disables reading the TID. This can improve
       * overall carton accuracy.
       */
      public Builder clearReadTid() {
        bitField0_ = (bitField0_ & ~0x00000010);
        readTid_ = true;
        onChanged();
        return this;
      }

      // optional uint32 carton_spacing = 5;
      private int cartonSpacing_ ;
      /**
       *
       * DEPRECATED
       */
      public boolean hasCartonSpacing() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       *
       * DEPRECATED
       */
      public int getCartonSpacing() {
        return cartonSpacing_;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setCartonSpacing(int value) {
        bitField0_ |= 0x00000020;
        cartonSpacing_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder clearCartonSpacing() {
        bitField0_ = (bitField0_ & ~0x00000020);
        cartonSpacing_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 start_trigger_offset = 2;
      private int startTriggerOffset_ ;
      /**
       *
       * DEPRECATED
       */
      public boolean hasStartTriggerOffset() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       *
       * DEPRECATED
       */
      public int getStartTriggerOffset() {
        return startTriggerOffset_;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setStartTriggerOffset(int value) {
        bitField0_ |= 0x00000040;
        startTriggerOffset_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder clearStartTriggerOffset() {
        bitField0_ = (bitField0_ & ~0x00000040);
        startTriggerOffset_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 stop_trigger_offset = 3;
      private int stopTriggerOffset_ ;
      /**
       *
       * DEPRECATED
       */
      public boolean hasStopTriggerOffset() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       *
       * DEPRECATED
       */
      public int getStopTriggerOffset() {
        return stopTriggerOffset_;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setStopTriggerOffset(int value) {
        bitField0_ |= 0x00000080;
        stopTriggerOffset_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder clearStopTriggerOffset() {
        bitField0_ = (bitField0_ & ~0x00000080);
        stopTriggerOffset_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.CartonContentsJob)
    }

    static {
      defaultInstance = new CartonContentsJob(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.CartonContentsJob)
  }

  public interface VoidTagConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool kill_tag = 1;
    /**
     *
     * If kill_tag is set, it overrides the other possible voiding
     * operations, and none of the other ones will be attempted.
     */
    boolean hasKillTag();
    /**
     *
     * If kill_tag is set, it overrides the other possible voiding
     * operations, and none of the other ones will be attempted.
     */
    boolean getKillTag();

    // optional bool permalock_all_banks = 2;
    /**
     *
     * Attempt to permalock all the memory banks after writing a 0
     * length to the PC word and 0xDEADDEAD to the first 2 words of
     * EPC memory.
     */
    boolean hasPermalockAllBanks();
    /**
     *
     * Attempt to permalock all the memory banks after writing a 0
     * length to the PC word and 0xDEADDEAD to the first 2 words of
     * EPC memory.
     */
    boolean getPermalockAllBanks();
  }
  /**
   * Protobuf type {@code Impinj.STP.VoidTagConfig}
   */
  public static final class VoidTagConfig extends
      com.google.protobuf.GeneratedMessage
      implements VoidTagConfigOrBuilder {
    // Use VoidTagConfig.newBuilder() to construct.
    private VoidTagConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private VoidTagConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final VoidTagConfig defaultInstance;
    public static VoidTagConfig getDefaultInstance() {
      return defaultInstance;
    }

    public VoidTagConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private VoidTagConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              killTag_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              permalockAllBanks_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.VoidTagConfig.class, com.impinj.stp.StpApi.VoidTagConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<VoidTagConfig> PARSER =
        new com.google.protobuf.AbstractParser<VoidTagConfig>() {
      public VoidTagConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new VoidTagConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<VoidTagConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool kill_tag = 1;
    public static final int KILL_TAG_FIELD_NUMBER = 1;
    private boolean killTag_;
    /**
     *
     * If kill_tag is set, it overrides the other possible voiding
     * operations, and none of the other ones will be attempted.
     */
    public boolean hasKillTag() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * If kill_tag is set, it overrides the other possible voiding
     * operations, and none of the other ones will be attempted.
     */
    public boolean getKillTag() {
      return killTag_;
    }

    // optional bool permalock_all_banks = 2;
    public static final int PERMALOCK_ALL_BANKS_FIELD_NUMBER = 2;
    private boolean permalockAllBanks_;
    /**
     *
     * Attempt to permalock all the memory banks after writing a 0
     * length to the PC word and 0xDEADDEAD to the first 2 words of
     * EPC memory.
     */
    public boolean hasPermalockAllBanks() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Attempt to permalock all the memory banks after writing a 0
     * length to the PC word and 0xDEADDEAD to the first 2 words of
     * EPC memory.
     */
    public boolean getPermalockAllBanks() {
      return permalockAllBanks_;
    }

    private void initFields() {
      killTag_ = false;
      permalockAllBanks_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, killTag_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, permalockAllBanks_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, killTag_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, permalockAllBanks_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.VoidTagConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.VoidTagConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.VoidTagConfig}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.VoidTagConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.VoidTagConfig.class, com.impinj.stp.StpApi.VoidTagConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.VoidTagConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        killTag_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        permalockAllBanks_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_VoidTagConfig_descriptor;
      }

      public com.impinj.stp.StpApi.VoidTagConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.VoidTagConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.VoidTagConfig build() {
        com.impinj.stp.StpApi.VoidTagConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.VoidTagConfig buildPartial() {
        com.impinj.stp.StpApi.VoidTagConfig result = new com.impinj.stp.StpApi.VoidTagConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.killTag_ = killTag_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.permalockAllBanks_ = permalockAllBanks_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.VoidTagConfig) {
          return mergeFrom((com.impinj.stp.StpApi.VoidTagConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.VoidTagConfig other) {
        if (other == com.impinj.stp.StpApi.VoidTagConfig.getDefaultInstance()) return this;
        if (other.hasKillTag()) {
          setKillTag(other.getKillTag());
        }
        if (other.hasPermalockAllBanks()) {
          setPermalockAllBanks(other.getPermalockAllBanks());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.VoidTagConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.VoidTagConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool kill_tag = 1;
      private boolean killTag_ ;
      /**
       *
       * If kill_tag is set, it overrides the other possible voiding
       * operations, and none of the other ones will be attempted.
       */
      public boolean hasKillTag() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * If kill_tag is set, it overrides the other possible voiding
       * operations, and none of the other ones will be attempted.
       */
      public boolean getKillTag() {
        return killTag_;
      }
      /**
       *
       * If kill_tag is set, it overrides the other possible voiding
       * operations, and none of the other ones will be attempted.
       */
      public Builder setKillTag(boolean value) {
        bitField0_ |= 0x00000001;
        killTag_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * If kill_tag is set, it overrides the other possible voiding
       * operations, and none of the other ones will be attempted.
       */
      public Builder clearKillTag() {
        bitField0_ = (bitField0_ & ~0x00000001);
        killTag_ = false;
        onChanged();
        return this;
      }

      // optional bool permalock_all_banks = 2;
      private boolean permalockAllBanks_ ;
      /**
       *
       * Attempt to permalock all the memory banks after writing a 0
       * length to the PC word and 0xDEADDEAD to the first 2 words of
       * EPC memory.
       */
      public boolean hasPermalockAllBanks() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Attempt to permalock all the memory banks after writing a 0
       * length to the PC word and 0xDEADDEAD to the first 2 words of
       * EPC memory.
       */
      public boolean getPermalockAllBanks() {
        return permalockAllBanks_;
      }
      /**
       *
       * Attempt to permalock all the memory banks after writing a 0
       * length to the PC word and 0xDEADDEAD to the first 2 words of
       * EPC memory.
       */
      public Builder setPermalockAllBanks(boolean value) {
        bitField0_ |= 0x00000002;
        permalockAllBanks_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Attempt to permalock all the memory banks after writing a 0
       * length to the PC word and 0xDEADDEAD to the first 2 words of
       * EPC memory.
       */
      public Builder clearPermalockAllBanks() {
        bitField0_ = (bitField0_ & ~0x00000002);
        permalockAllBanks_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.VoidTagConfig)
    }

    static {
      defaultInstance = new VoidTagConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.VoidTagConfig)
  }

  public interface FilterOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes data = 1;
    /**
     *
     * Data to be matched.
     */
    boolean hasData();
    /**
     *
     * Data to be matched.
     */
    com.google.protobuf.ByteString getData();

    // optional bytes mask = 2;
    /**
     *
     * Which bits to match.
     */
    boolean hasMask();
    /**
     *
     * Which bits to match.
     */
    com.google.protobuf.ByteString getMask();

    // optional uint32 word_offset = 3 [default = 0];
    /**
     *
     * This offset specifies the word address to start the data and
     * mask at.
     */
    boolean hasWordOffset();
    /**
     *
     * This offset specifies the word address to start the data and
     * mask at.
     */
    int getWordOffset();
  }
  /**
   * Protobuf type {@code Impinj.STP.Filter}
   */
  public static final class Filter extends
      com.google.protobuf.GeneratedMessage
      implements FilterOrBuilder {
    // Use Filter.newBuilder() to construct.
    private Filter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Filter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Filter defaultInstance;
    public static Filter getDefaultInstance() {
      return defaultInstance;
    }

    public Filter getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Filter(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              data_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              mask_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              wordOffset_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Filter_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Filter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Filter.class, com.impinj.stp.StpApi.Filter.Builder.class);
    }

    public static com.google.protobuf.Parser<Filter> PARSER =
        new com.google.protobuf.AbstractParser<Filter>() {
      public Filter parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Filter(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Filter> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes data = 1;
    public static final int DATA_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString data_;
    /**
     *
     * Data to be matched.
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Data to be matched.
     */
    public com.google.protobuf.ByteString getData() {
      return data_;
    }

    // optional bytes mask = 2;
    public static final int MASK_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString mask_;
    /**
     *
     * Which bits to match.
     */
    public boolean hasMask() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Which bits to match.
     */
    public com.google.protobuf.ByteString getMask() {
      return mask_;
    }

    // optional uint32 word_offset = 3 [default = 0];
    public static final int WORD_OFFSET_FIELD_NUMBER = 3;
    private int wordOffset_;
    /**
     *
     * This offset specifies the word address to start the data and
     * mask at.
     */
    public boolean hasWordOffset() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * This offset specifies the word address to start the data and
     * mask at.
     */
    public int getWordOffset() {
      return wordOffset_;
    }

    private void initFields() {
      data_ = com.google.protobuf.ByteString.EMPTY;
      mask_ = com.google.protobuf.ByteString.EMPTY;
      wordOffset_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, mask_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(3, wordOffset_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, mask_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, wordOffset_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Filter parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Filter parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Filter parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Filter parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Filter parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Filter parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Filter parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Filter parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Filter parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Filter parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Filter prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Filter}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.FilterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Filter_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Filter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Filter.class, com.impinj.stp.StpApi.Filter.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Filter.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        mask_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        wordOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Filter_descriptor;
      }

      public com.impinj.stp.StpApi.Filter getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Filter.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Filter build() {
        com.impinj.stp.StpApi.Filter result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Filter buildPartial() {
        com.impinj.stp.StpApi.Filter result = new com.impinj.stp.StpApi.Filter(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.mask_ = mask_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.wordOffset_ = wordOffset_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Filter) {
          return mergeFrom((com.impinj.stp.StpApi.Filter)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Filter other) {
        if (other == com.impinj.stp.StpApi.Filter.getDefaultInstance()) return this;
        if (other.hasData()) {
          setData(other.getData());
        }
        if (other.hasMask()) {
          setMask(other.getMask());
        }
        if (other.hasWordOffset()) {
          setWordOffset(other.getWordOffset());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Filter parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Filter) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes data = 1;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * Data to be matched.
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Data to be matched.
       */
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      /**
       *
       * Data to be matched.
       */
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        data_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Data to be matched.
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }

      // optional bytes mask = 2;
      private com.google.protobuf.ByteString mask_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * Which bits to match.
       */
      public boolean hasMask() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Which bits to match.
       */
      public com.google.protobuf.ByteString getMask() {
        return mask_;
      }
      /**
       *
       * Which bits to match.
       */
      public Builder setMask(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        mask_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Which bits to match.
       */
      public Builder clearMask() {
        bitField0_ = (bitField0_ & ~0x00000002);
        mask_ = getDefaultInstance().getMask();
        onChanged();
        return this;
      }

      // optional uint32 word_offset = 3 [default = 0];
      private int wordOffset_ ;
      /**
       *
       * This offset specifies the word address to start the data and
       * mask at.
       */
      public boolean hasWordOffset() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * This offset specifies the word address to start the data and
       * mask at.
       */
      public int getWordOffset() {
        return wordOffset_;
      }
      /**
       *
       * This offset specifies the word address to start the data and
       * mask at.
       */
      public Builder setWordOffset(int value) {
        bitField0_ |= 0x00000004;
        wordOffset_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * This offset specifies the word address to start the data and
       * mask at.
       */
      public Builder clearWordOffset() {
        bitField0_ = (bitField0_ & ~0x00000004);
        wordOffset_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Filter)
    }

    static {
      defaultInstance = new Filter(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Filter)
  }

  public interface SerializationJobFiltersOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .Impinj.STP.Filter tid_filters = 1;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.Filter> 
        getTidFiltersList();
    /**
     */
    com.impinj.stp.StpApi.Filter getTidFilters(int index);
    /**
     */
    int getTidFiltersCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.FilterOrBuilder> 
        getTidFiltersOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.FilterOrBuilder getTidFiltersOrBuilder(
        int index);

    // repeated .Impinj.STP.Filter epc_filters = 2;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.Filter> 
        getEpcFiltersList();
    /**
     */
    com.impinj.stp.StpApi.Filter getEpcFilters(int index);
    /**
     */
    int getEpcFiltersCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.FilterOrBuilder> 
        getEpcFiltersOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.FilterOrBuilder getEpcFiltersOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code Impinj.STP.SerializationJobFilters}
   */
  public static final class SerializationJobFilters extends
      com.google.protobuf.GeneratedMessage
      implements SerializationJobFiltersOrBuilder {
    // Use SerializationJobFilters.newBuilder() to construct.
    private SerializationJobFilters(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SerializationJobFilters(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SerializationJobFilters defaultInstance;
    public static SerializationJobFilters getDefaultInstance() {
      return defaultInstance;
    }

    public SerializationJobFilters getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SerializationJobFilters(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                tidFilters_ = new java.util.ArrayList<com.impinj.stp.StpApi.Filter>();
                mutable_bitField0_ |= 0x00000001;
              }
              tidFilters_.add(input.readMessage(com.impinj.stp.StpApi.Filter.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                epcFilters_ = new java.util.ArrayList<com.impinj.stp.StpApi.Filter>();
                mutable_bitField0_ |= 0x00000002;
              }
              epcFilters_.add(input.readMessage(com.impinj.stp.StpApi.Filter.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          tidFilters_ = java.util.Collections.unmodifiableList(tidFilters_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          epcFilters_ = java.util.Collections.unmodifiableList(epcFilters_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJobFilters_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJobFilters_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SerializationJobFilters.class, com.impinj.stp.StpApi.SerializationJobFilters.Builder.class);
    }

    public static com.google.protobuf.Parser<SerializationJobFilters> PARSER =
        new com.google.protobuf.AbstractParser<SerializationJobFilters>() {
      public SerializationJobFilters parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SerializationJobFilters(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SerializationJobFilters> getParserForType() {
      return PARSER;
    }

    // repeated .Impinj.STP.Filter tid_filters = 1;
    public static final int TID_FILTERS_FIELD_NUMBER = 1;
    private java.util.List<com.impinj.stp.StpApi.Filter> tidFilters_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.Filter> getTidFiltersList() {
      return tidFilters_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.FilterOrBuilder> 
        getTidFiltersOrBuilderList() {
      return tidFilters_;
    }
    /**
     */
    public int getTidFiltersCount() {
      return tidFilters_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.Filter getTidFilters(int index) {
      return tidFilters_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.FilterOrBuilder getTidFiltersOrBuilder(
        int index) {
      return tidFilters_.get(index);
    }

    // repeated .Impinj.STP.Filter epc_filters = 2;
    public static final int EPC_FILTERS_FIELD_NUMBER = 2;
    private java.util.List<com.impinj.stp.StpApi.Filter> epcFilters_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.Filter> getEpcFiltersList() {
      return epcFilters_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.FilterOrBuilder> 
        getEpcFiltersOrBuilderList() {
      return epcFilters_;
    }
    /**
     */
    public int getEpcFiltersCount() {
      return epcFilters_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.Filter getEpcFilters(int index) {
      return epcFilters_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.FilterOrBuilder getEpcFiltersOrBuilder(
        int index) {
      return epcFilters_.get(index);
    }

    private void initFields() {
      tidFilters_ = java.util.Collections.emptyList();
      epcFilters_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < tidFilters_.size(); i++) {
        output.writeMessage(1, tidFilters_.get(i));
      }
      for (int i = 0; i < epcFilters_.size(); i++) {
        output.writeMessage(2, epcFilters_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < tidFilters_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, tidFilters_.get(i));
      }
      for (int i = 0; i < epcFilters_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, epcFilters_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SerializationJobFilters parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SerializationJobFilters prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SerializationJobFilters}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SerializationJobFiltersOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJobFilters_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJobFilters_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SerializationJobFilters.class, com.impinj.stp.StpApi.SerializationJobFilters.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SerializationJobFilters.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTidFiltersFieldBuilder();
          getEpcFiltersFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (tidFiltersBuilder_ == null) {
          tidFilters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          tidFiltersBuilder_.clear();
        }
        if (epcFiltersBuilder_ == null) {
          epcFilters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          epcFiltersBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJobFilters_descriptor;
      }

      public com.impinj.stp.StpApi.SerializationJobFilters getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SerializationJobFilters.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SerializationJobFilters build() {
        com.impinj.stp.StpApi.SerializationJobFilters result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SerializationJobFilters buildPartial() {
        com.impinj.stp.StpApi.SerializationJobFilters result = new com.impinj.stp.StpApi.SerializationJobFilters(this);
        int from_bitField0_ = bitField0_;
        if (tidFiltersBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            tidFilters_ = java.util.Collections.unmodifiableList(tidFilters_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.tidFilters_ = tidFilters_;
        } else {
          result.tidFilters_ = tidFiltersBuilder_.build();
        }
        if (epcFiltersBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            epcFilters_ = java.util.Collections.unmodifiableList(epcFilters_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.epcFilters_ = epcFilters_;
        } else {
          result.epcFilters_ = epcFiltersBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SerializationJobFilters) {
          return mergeFrom((com.impinj.stp.StpApi.SerializationJobFilters)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SerializationJobFilters other) {
        if (other == com.impinj.stp.StpApi.SerializationJobFilters.getDefaultInstance()) return this;
        if (tidFiltersBuilder_ == null) {
          if (!other.tidFilters_.isEmpty()) {
            if (tidFilters_.isEmpty()) {
              tidFilters_ = other.tidFilters_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureTidFiltersIsMutable();
              tidFilters_.addAll(other.tidFilters_);
            }
            onChanged();
          }
        } else {
          if (!other.tidFilters_.isEmpty()) {
            if (tidFiltersBuilder_.isEmpty()) {
              tidFiltersBuilder_.dispose();
              tidFiltersBuilder_ = null;
              tidFilters_ = other.tidFilters_;
              bitField0_ = (bitField0_ & ~0x00000001);
              tidFiltersBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTidFiltersFieldBuilder() : null;
            } else {
              tidFiltersBuilder_.addAllMessages(other.tidFilters_);
            }
          }
        }
        if (epcFiltersBuilder_ == null) {
          if (!other.epcFilters_.isEmpty()) {
            if (epcFilters_.isEmpty()) {
              epcFilters_ = other.epcFilters_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureEpcFiltersIsMutable();
              epcFilters_.addAll(other.epcFilters_);
            }
            onChanged();
          }
        } else {
          if (!other.epcFilters_.isEmpty()) {
            if (epcFiltersBuilder_.isEmpty()) {
              epcFiltersBuilder_.dispose();
              epcFiltersBuilder_ = null;
              epcFilters_ = other.epcFilters_;
              bitField0_ = (bitField0_ & ~0x00000002);
              epcFiltersBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getEpcFiltersFieldBuilder() : null;
            } else {
              epcFiltersBuilder_.addAllMessages(other.epcFilters_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SerializationJobFilters parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SerializationJobFilters) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .Impinj.STP.Filter tid_filters = 1;
      private java.util.List<com.impinj.stp.StpApi.Filter> tidFilters_ =
        java.util.Collections.emptyList();
      private void ensureTidFiltersIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          tidFilters_ = new java.util.ArrayList<com.impinj.stp.StpApi.Filter>(tidFilters_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.Filter, com.impinj.stp.StpApi.Filter.Builder, com.impinj.stp.StpApi.FilterOrBuilder> tidFiltersBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.Filter> getTidFiltersList() {
        if (tidFiltersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tidFilters_);
        } else {
          return tidFiltersBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getTidFiltersCount() {
        if (tidFiltersBuilder_ == null) {
          return tidFilters_.size();
        } else {
          return tidFiltersBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter getTidFilters(int index) {
        if (tidFiltersBuilder_ == null) {
          return tidFilters_.get(index);
        } else {
          return tidFiltersBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setTidFilters(
          int index, com.impinj.stp.StpApi.Filter value) {
        if (tidFiltersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTidFiltersIsMutable();
          tidFilters_.set(index, value);
          onChanged();
        } else {
          tidFiltersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setTidFilters(
          int index, com.impinj.stp.StpApi.Filter.Builder builderForValue) {
        if (tidFiltersBuilder_ == null) {
          ensureTidFiltersIsMutable();
          tidFilters_.set(index, builderForValue.build());
          onChanged();
        } else {
          tidFiltersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTidFilters(com.impinj.stp.StpApi.Filter value) {
        if (tidFiltersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTidFiltersIsMutable();
          tidFilters_.add(value);
          onChanged();
        } else {
          tidFiltersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addTidFilters(
          int index, com.impinj.stp.StpApi.Filter value) {
        if (tidFiltersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTidFiltersIsMutable();
          tidFilters_.add(index, value);
          onChanged();
        } else {
          tidFiltersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addTidFilters(
          com.impinj.stp.StpApi.Filter.Builder builderForValue) {
        if (tidFiltersBuilder_ == null) {
          ensureTidFiltersIsMutable();
          tidFilters_.add(builderForValue.build());
          onChanged();
        } else {
          tidFiltersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTidFilters(
          int index, com.impinj.stp.StpApi.Filter.Builder builderForValue) {
        if (tidFiltersBuilder_ == null) {
          ensureTidFiltersIsMutable();
          tidFilters_.add(index, builderForValue.build());
          onChanged();
        } else {
          tidFiltersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllTidFilters(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.Filter> values) {
        if (tidFiltersBuilder_ == null) {
          ensureTidFiltersIsMutable();
          super.addAll(values, tidFilters_);
          onChanged();
        } else {
          tidFiltersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearTidFilters() {
        if (tidFiltersBuilder_ == null) {
          tidFilters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          tidFiltersBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeTidFilters(int index) {
        if (tidFiltersBuilder_ == null) {
          ensureTidFiltersIsMutable();
          tidFilters_.remove(index);
          onChanged();
        } else {
          tidFiltersBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter.Builder getTidFiltersBuilder(
          int index) {
        return getTidFiltersFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.FilterOrBuilder getTidFiltersOrBuilder(
          int index) {
        if (tidFiltersBuilder_ == null) {
          return tidFilters_.get(index);  } else {
          return tidFiltersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.FilterOrBuilder> 
           getTidFiltersOrBuilderList() {
        if (tidFiltersBuilder_ != null) {
          return tidFiltersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tidFilters_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter.Builder addTidFiltersBuilder() {
        return getTidFiltersFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.Filter.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter.Builder addTidFiltersBuilder(
          int index) {
        return getTidFiltersFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.Filter.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.Filter.Builder> 
           getTidFiltersBuilderList() {
        return getTidFiltersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.Filter, com.impinj.stp.StpApi.Filter.Builder, com.impinj.stp.StpApi.FilterOrBuilder> 
          getTidFiltersFieldBuilder() {
        if (tidFiltersBuilder_ == null) {
          tidFiltersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.Filter, com.impinj.stp.StpApi.Filter.Builder, com.impinj.stp.StpApi.FilterOrBuilder>(
                  tidFilters_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          tidFilters_ = null;
        }
        return tidFiltersBuilder_;
      }

      // repeated .Impinj.STP.Filter epc_filters = 2;
      private java.util.List<com.impinj.stp.StpApi.Filter> epcFilters_ =
        java.util.Collections.emptyList();
      private void ensureEpcFiltersIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          epcFilters_ = new java.util.ArrayList<com.impinj.stp.StpApi.Filter>(epcFilters_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.Filter, com.impinj.stp.StpApi.Filter.Builder, com.impinj.stp.StpApi.FilterOrBuilder> epcFiltersBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.Filter> getEpcFiltersList() {
        if (epcFiltersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(epcFilters_);
        } else {
          return epcFiltersBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getEpcFiltersCount() {
        if (epcFiltersBuilder_ == null) {
          return epcFilters_.size();
        } else {
          return epcFiltersBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter getEpcFilters(int index) {
        if (epcFiltersBuilder_ == null) {
          return epcFilters_.get(index);
        } else {
          return epcFiltersBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setEpcFilters(
          int index, com.impinj.stp.StpApi.Filter value) {
        if (epcFiltersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEpcFiltersIsMutable();
          epcFilters_.set(index, value);
          onChanged();
        } else {
          epcFiltersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setEpcFilters(
          int index, com.impinj.stp.StpApi.Filter.Builder builderForValue) {
        if (epcFiltersBuilder_ == null) {
          ensureEpcFiltersIsMutable();
          epcFilters_.set(index, builderForValue.build());
          onChanged();
        } else {
          epcFiltersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addEpcFilters(com.impinj.stp.StpApi.Filter value) {
        if (epcFiltersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEpcFiltersIsMutable();
          epcFilters_.add(value);
          onChanged();
        } else {
          epcFiltersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addEpcFilters(
          int index, com.impinj.stp.StpApi.Filter value) {
        if (epcFiltersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEpcFiltersIsMutable();
          epcFilters_.add(index, value);
          onChanged();
        } else {
          epcFiltersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addEpcFilters(
          com.impinj.stp.StpApi.Filter.Builder builderForValue) {
        if (epcFiltersBuilder_ == null) {
          ensureEpcFiltersIsMutable();
          epcFilters_.add(builderForValue.build());
          onChanged();
        } else {
          epcFiltersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addEpcFilters(
          int index, com.impinj.stp.StpApi.Filter.Builder builderForValue) {
        if (epcFiltersBuilder_ == null) {
          ensureEpcFiltersIsMutable();
          epcFilters_.add(index, builderForValue.build());
          onChanged();
        } else {
          epcFiltersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllEpcFilters(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.Filter> values) {
        if (epcFiltersBuilder_ == null) {
          ensureEpcFiltersIsMutable();
          super.addAll(values, epcFilters_);
          onChanged();
        } else {
          epcFiltersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearEpcFilters() {
        if (epcFiltersBuilder_ == null) {
          epcFilters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          epcFiltersBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeEpcFilters(int index) {
        if (epcFiltersBuilder_ == null) {
          ensureEpcFiltersIsMutable();
          epcFilters_.remove(index);
          onChanged();
        } else {
          epcFiltersBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter.Builder getEpcFiltersBuilder(
          int index) {
        return getEpcFiltersFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.FilterOrBuilder getEpcFiltersOrBuilder(
          int index) {
        if (epcFiltersBuilder_ == null) {
          return epcFilters_.get(index);  } else {
          return epcFiltersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.FilterOrBuilder> 
           getEpcFiltersOrBuilderList() {
        if (epcFiltersBuilder_ != null) {
          return epcFiltersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(epcFilters_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter.Builder addEpcFiltersBuilder() {
        return getEpcFiltersFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.Filter.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.Filter.Builder addEpcFiltersBuilder(
          int index) {
        return getEpcFiltersFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.Filter.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.Filter.Builder> 
           getEpcFiltersBuilderList() {
        return getEpcFiltersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.Filter, com.impinj.stp.StpApi.Filter.Builder, com.impinj.stp.StpApi.FilterOrBuilder> 
          getEpcFiltersFieldBuilder() {
        if (epcFiltersBuilder_ == null) {
          epcFiltersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.Filter, com.impinj.stp.StpApi.Filter.Builder, com.impinj.stp.StpApi.FilterOrBuilder>(
                  epcFilters_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          epcFilters_ = null;
        }
        return epcFiltersBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SerializationJobFilters)
    }

    static {
      defaultInstance = new SerializationJobFilters(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SerializationJobFilters)
  }

  public interface SerializationJobOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required uint32 job_id = 1;
    /**
     */
    boolean hasJobId();
    /**
     */
    int getJobId();

    // required .Impinj.STP.SerializationJobType job_type = 2;
    /**
     */
    boolean hasJobType();
    /**
     */
    com.impinj.stp.StpApi.SerializationJobType getJobType();

    // optional .Impinj.STP.SerializationJobCompletionCriteria job_completion_criteria = 3 [default = SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE];
    /**
     */
    boolean hasJobCompletionCriteria();
    /**
     */
    com.impinj.stp.StpApi.SerializationJobCompletionCriteria getJobCompletionCriteria();

    // optional uint32 operation_quantity = 4;
    /**
     *
     * NOT YET SUPPORTED
     */
    boolean hasOperationQuantity();
    /**
     *
     * NOT YET SUPPORTED
     */
    int getOperationQuantity();

    // optional .Impinj.STP.EPCMemory EPC_memory = 5;
    /**
     */
    boolean hasEPCMemory();
    /**
     */
    com.impinj.stp.StpApi.EPCMemory getEPCMemory();
    /**
     */
    com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder();

    // optional .Impinj.STP.TIDMemory TID_memory = 6;
    /**
     */
    boolean hasTIDMemory();
    /**
     */
    com.impinj.stp.StpApi.TIDMemory getTIDMemory();
    /**
     */
    com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder();

    // optional .Impinj.STP.UserMemory user_memory = 7;
    /**
     */
    boolean hasUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemory getUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder();

    // optional .Impinj.STP.Password secure_password = 8;
    /**
     */
    boolean hasSecurePassword();
    /**
     */
    com.impinj.stp.StpApi.Password getSecurePassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder();

    // optional .Impinj.STP.Password access_password = 9;
    /**
     */
    boolean hasAccessPassword();
    /**
     */
    com.impinj.stp.StpApi.Password getAccessPassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder();

    // optional .Impinj.STP.Password kill_password = 10;
    /**
     */
    boolean hasKillPassword();
    /**
     */
    com.impinj.stp.StpApi.Password getKillPassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder();

    // optional .Impinj.STP.LockConfig lock_config = 11;
    /**
     */
    boolean hasLockConfig();
    /**
     */
    com.impinj.stp.StpApi.LockConfig getLockConfig();
    /**
     */
    com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder();

    // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 12;
    /**
     *
     * NOT YET SUPPORTED
     */
    boolean hasBlockpermalockConfig();
    /**
     *
     * NOT YET SUPPORTED
     */
    com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig();
    /**
     *
     * NOT YET SUPPORTED
     */
    com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder();

    // optional bool kill_tag = 16;
    /**
     *
     * optional    MonzaQT                             monza_QT
     * = 13;
     */
    boolean hasKillTag();
    /**
     *
     * optional    MonzaQT                             monza_QT
     * = 13;
     */
    boolean getKillTag();

    // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 20;
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6PFeatureConfig();
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig();
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 21;
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaS6CFeatureConfig();
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig();
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 22;
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6FeatureConfig();
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig();
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 23;
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6AFeatureConfig();
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig();
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder();

    // optional uint32 TID_table_size = 17 [default = 100];
    /**
     */
    boolean hasTIDTableSize();
    /**
     */
    int getTIDTableSize();

    // repeated .Impinj.STP.TIDTableEntry TID_table_entries = 14;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.TIDTableEntry> 
        getTIDTableEntriesList();
    /**
     */
    com.impinj.stp.StpApi.TIDTableEntry getTIDTableEntries(int index);
    /**
     */
    int getTIDTableEntriesCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
        getTIDTableEntriesOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.TIDTableEntryOrBuilder getTIDTableEntriesOrBuilder(
        int index);

    // repeated .Impinj.STP.OrderedListEntry ordered_list_entries = 15;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.OrderedListEntry> 
        getOrderedListEntriesList();
    /**
     */
    com.impinj.stp.StpApi.OrderedListEntry getOrderedListEntries(int index);
    /**
     */
    int getOrderedListEntriesCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
        getOrderedListEntriesOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.OrderedListEntryOrBuilder getOrderedListEntriesOrBuilder(
        int index);

    // optional .Impinj.STP.VoidTagConfig void_tag_config = 18;
    /**
     */
    boolean hasVoidTagConfig();
    /**
     */
    com.impinj.stp.StpApi.VoidTagConfig getVoidTagConfig();
    /**
     */
    com.impinj.stp.StpApi.VoidTagConfigOrBuilder getVoidTagConfigOrBuilder();

    // optional .Impinj.STP.SerializationJobFilters filters = 19;
    /**
     */
    boolean hasFilters();
    /**
     */
    com.impinj.stp.StpApi.SerializationJobFilters getFilters();
    /**
     */
    com.impinj.stp.StpApi.SerializationJobFiltersOrBuilder getFiltersOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SerializationJob}
   *
   * What to write and whether to set passwords and lock the tag.
   */
  public static final class SerializationJob extends
      com.google.protobuf.GeneratedMessage
      implements SerializationJobOrBuilder {
    // Use SerializationJob.newBuilder() to construct.
    private SerializationJob(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SerializationJob(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SerializationJob defaultInstance;
    public static SerializationJob getDefaultInstance() {
      return defaultInstance;
    }

    public SerializationJob getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SerializationJob(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              jobId_ = input.readUInt32();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.SerializationJobType value = com.impinj.stp.StpApi.SerializationJobType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                jobType_ = value;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.SerializationJobCompletionCriteria value = com.impinj.stp.StpApi.SerializationJobCompletionCriteria.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                jobCompletionCriteria_ = value;
              }
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              operationQuantity_ = input.readUInt32();
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.EPCMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = ePCMemory_.toBuilder();
              }
              ePCMemory_ = input.readMessage(com.impinj.stp.StpApi.EPCMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ePCMemory_);
                ePCMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.TIDMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = tIDMemory_.toBuilder();
              }
              tIDMemory_ = input.readMessage(com.impinj.stp.StpApi.TIDMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tIDMemory_);
                tIDMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 58: {
              com.impinj.stp.StpApi.UserMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = userMemory_.toBuilder();
              }
              userMemory_ = input.readMessage(com.impinj.stp.StpApi.UserMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(userMemory_);
                userMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 66: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = securePassword_.toBuilder();
              }
              securePassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(securePassword_);
                securePassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 74: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = accessPassword_.toBuilder();
              }
              accessPassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(accessPassword_);
                accessPassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 82: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = killPassword_.toBuilder();
              }
              killPassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(killPassword_);
                killPassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 90: {
              com.impinj.stp.StpApi.LockConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = lockConfig_.toBuilder();
              }
              lockConfig_ = input.readMessage(com.impinj.stp.StpApi.LockConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(lockConfig_);
                lockConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 98: {
              com.impinj.stp.StpApi.BlockPermalockConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) == 0x00000800)) {
                subBuilder = blockpermalockConfig_.toBuilder();
              }
              blockpermalockConfig_ = input.readMessage(com.impinj.stp.StpApi.BlockPermalockConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(blockpermalockConfig_);
                blockpermalockConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
            case 114: {
              if (!((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
                tIDTableEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.TIDTableEntry>();
                mutable_bitField0_ |= 0x00040000;
              }
              tIDTableEntries_.add(input.readMessage(com.impinj.stp.StpApi.TIDTableEntry.PARSER, extensionRegistry));
              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00080000) == 0x00080000)) {
                orderedListEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.OrderedListEntry>();
                mutable_bitField0_ |= 0x00080000;
              }
              orderedListEntries_.add(input.readMessage(com.impinj.stp.StpApi.OrderedListEntry.PARSER, extensionRegistry));
              break;
            }
            case 128: {
              bitField0_ |= 0x00001000;
              killTag_ = input.readBool();
              break;
            }
            case 136: {
              bitField0_ |= 0x00020000;
              tIDTableSize_ = input.readUInt32();
              break;
            }
            case 146: {
              com.impinj.stp.StpApi.VoidTagConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00040000) == 0x00040000)) {
                subBuilder = voidTagConfig_.toBuilder();
              }
              voidTagConfig_ = input.readMessage(com.impinj.stp.StpApi.VoidTagConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(voidTagConfig_);
                voidTagConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00040000;
              break;
            }
            case 154: {
              com.impinj.stp.StpApi.SerializationJobFilters.Builder subBuilder = null;
              if (((bitField0_ & 0x00080000) == 0x00080000)) {
                subBuilder = filters_.toBuilder();
              }
              filters_ = input.readMessage(com.impinj.stp.StpApi.SerializationJobFilters.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(filters_);
                filters_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00080000;
              break;
            }
            case 162: {
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00002000) == 0x00002000)) {
                subBuilder = monzaR6PFeatureConfig_.toBuilder();
              }
              monzaR6PFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6PFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6PFeatureConfig_);
                monzaR6PFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00002000;
              break;
            }
            case 170: {
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00004000) == 0x00004000)) {
                subBuilder = monzaS6CFeatureConfig_.toBuilder();
              }
              monzaS6CFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaS6CFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaS6CFeatureConfig_);
                monzaS6CFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00004000;
              break;
            }
            case 178: {
              com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00008000) == 0x00008000)) {
                subBuilder = monzaR6FeatureConfig_.toBuilder();
              }
              monzaR6FeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6FeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6FeatureConfig_);
                monzaR6FeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00008000;
              break;
            }
            case 186: {
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00010000) == 0x00010000)) {
                subBuilder = monzaR6AFeatureConfig_.toBuilder();
              }
              monzaR6AFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6AFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6AFeatureConfig_);
                monzaR6AFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00010000;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
          tIDTableEntries_ = java.util.Collections.unmodifiableList(tIDTableEntries_);
        }
        if (((mutable_bitField0_ & 0x00080000) == 0x00080000)) {
          orderedListEntries_ = java.util.Collections.unmodifiableList(orderedListEntries_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJob_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJob_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SerializationJob.class, com.impinj.stp.StpApi.SerializationJob.Builder.class);
    }

    public static com.google.protobuf.Parser<SerializationJob> PARSER =
        new com.google.protobuf.AbstractParser<SerializationJob>() {
      public SerializationJob parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SerializationJob(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SerializationJob> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required uint32 job_id = 1;
    public static final int JOB_ID_FIELD_NUMBER = 1;
    private int jobId_;
    /**
     */
    public boolean hasJobId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public int getJobId() {
      return jobId_;
    }

    // required .Impinj.STP.SerializationJobType job_type = 2;
    public static final int JOB_TYPE_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.SerializationJobType jobType_;
    /**
     */
    public boolean hasJobType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.SerializationJobType getJobType() {
      return jobType_;
    }

    // optional .Impinj.STP.SerializationJobCompletionCriteria job_completion_criteria = 3 [default = SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE];
    public static final int JOB_COMPLETION_CRITERIA_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.SerializationJobCompletionCriteria jobCompletionCriteria_;
    /**
     */
    public boolean hasJobCompletionCriteria() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.SerializationJobCompletionCriteria getJobCompletionCriteria() {
      return jobCompletionCriteria_;
    }

    // optional uint32 operation_quantity = 4;
    public static final int OPERATION_QUANTITY_FIELD_NUMBER = 4;
    private int operationQuantity_;
    /**
     *
     * NOT YET SUPPORTED
     */
    public boolean hasOperationQuantity() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * NOT YET SUPPORTED
     */
    public int getOperationQuantity() {
      return operationQuantity_;
    }

    // optional .Impinj.STP.EPCMemory EPC_memory = 5;
    public static final int EPC_MEMORY_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.EPCMemory ePCMemory_;
    /**
     */
    public boolean hasEPCMemory() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public com.impinj.stp.StpApi.EPCMemory getEPCMemory() {
      return ePCMemory_;
    }
    /**
     */
    public com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder() {
      return ePCMemory_;
    }

    // optional .Impinj.STP.TIDMemory TID_memory = 6;
    public static final int TID_MEMORY_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.TIDMemory tIDMemory_;
    /**
     */
    public boolean hasTIDMemory() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDMemory getTIDMemory() {
      return tIDMemory_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder() {
      return tIDMemory_;
    }

    // optional .Impinj.STP.UserMemory user_memory = 7;
    public static final int USER_MEMORY_FIELD_NUMBER = 7;
    private com.impinj.stp.StpApi.UserMemory userMemory_;
    /**
     */
    public boolean hasUserMemory() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemory getUserMemory() {
      return userMemory_;
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
      return userMemory_;
    }

    // optional .Impinj.STP.Password secure_password = 8;
    public static final int SECURE_PASSWORD_FIELD_NUMBER = 8;
    private com.impinj.stp.StpApi.Password securePassword_;
    /**
     */
    public boolean hasSecurePassword() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getSecurePassword() {
      return securePassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder() {
      return securePassword_;
    }

    // optional .Impinj.STP.Password access_password = 9;
    public static final int ACCESS_PASSWORD_FIELD_NUMBER = 9;
    private com.impinj.stp.StpApi.Password accessPassword_;
    /**
     */
    public boolean hasAccessPassword() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getAccessPassword() {
      return accessPassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder() {
      return accessPassword_;
    }

    // optional .Impinj.STP.Password kill_password = 10;
    public static final int KILL_PASSWORD_FIELD_NUMBER = 10;
    private com.impinj.stp.StpApi.Password killPassword_;
    /**
     */
    public boolean hasKillPassword() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getKillPassword() {
      return killPassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder() {
      return killPassword_;
    }

    // optional .Impinj.STP.LockConfig lock_config = 11;
    public static final int LOCK_CONFIG_FIELD_NUMBER = 11;
    private com.impinj.stp.StpApi.LockConfig lockConfig_;
    /**
     */
    public boolean hasLockConfig() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     */
    public com.impinj.stp.StpApi.LockConfig getLockConfig() {
      return lockConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder() {
      return lockConfig_;
    }

    // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 12;
    public static final int BLOCKPERMALOCK_CONFIG_FIELD_NUMBER = 12;
    private com.impinj.stp.StpApi.BlockPermalockConfig blockpermalockConfig_;
    /**
     *
     * NOT YET SUPPORTED
     */
    public boolean hasBlockpermalockConfig() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     *
     * NOT YET SUPPORTED
     */
    public com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig() {
      return blockpermalockConfig_;
    }
    /**
     *
     * NOT YET SUPPORTED
     */
    public com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder() {
      return blockpermalockConfig_;
    }

    // optional bool kill_tag = 16;
    public static final int KILL_TAG_FIELD_NUMBER = 16;
    private boolean killTag_;
    /**
     *
     * optional    MonzaQT                             monza_QT
     * = 13;
     */
    public boolean hasKillTag() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     *
     * optional    MonzaQT                             monza_QT
     * = 13;
     */
    public boolean getKillTag() {
      return killTag_;
    }

    // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 20;
    public static final int MONZA_R6P_FEATURE_CONFIG_FIELD_NUMBER = 20;
    private com.impinj.stp.StpApi.MonzaR6PFeatureConfig monzaR6PFeatureConfig_;
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6PFeatureConfig() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig() {
      return monzaR6PFeatureConfig_;
    }
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder() {
      return monzaR6PFeatureConfig_;
    }

    // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 21;
    public static final int MONZA_S6C_FEATURE_CONFIG_FIELD_NUMBER = 21;
    private com.impinj.stp.StpApi.MonzaS6CFeatureConfig monzaS6CFeatureConfig_;
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaS6CFeatureConfig() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig() {
      return monzaS6CFeatureConfig_;
    }
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder() {
      return monzaS6CFeatureConfig_;
    }

    // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 22;
    public static final int MONZA_R6_FEATURE_CONFIG_FIELD_NUMBER = 22;
    private com.impinj.stp.StpApi.MonzaR6FeatureConfig monzaR6FeatureConfig_;
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6FeatureConfig() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig() {
      return monzaR6FeatureConfig_;
    }
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder() {
      return monzaR6FeatureConfig_;
    }

    // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 23;
    public static final int MONZA_R6A_FEATURE_CONFIG_FIELD_NUMBER = 23;
    private com.impinj.stp.StpApi.MonzaR6AFeatureConfig monzaR6AFeatureConfig_;
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6AFeatureConfig() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig() {
      return monzaR6AFeatureConfig_;
    }
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder() {
      return monzaR6AFeatureConfig_;
    }

    // optional uint32 TID_table_size = 17 [default = 100];
    public static final int TID_TABLE_SIZE_FIELD_NUMBER = 17;
    private int tIDTableSize_;
    /**
     */
    public boolean hasTIDTableSize() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     */
    public int getTIDTableSize() {
      return tIDTableSize_;
    }

    // repeated .Impinj.STP.TIDTableEntry TID_table_entries = 14;
    public static final int TID_TABLE_ENTRIES_FIELD_NUMBER = 14;
    private java.util.List<com.impinj.stp.StpApi.TIDTableEntry> tIDTableEntries_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.TIDTableEntry> getTIDTableEntriesList() {
      return tIDTableEntries_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
        getTIDTableEntriesOrBuilderList() {
      return tIDTableEntries_;
    }
    /**
     */
    public int getTIDTableEntriesCount() {
      return tIDTableEntries_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDTableEntry getTIDTableEntries(int index) {
      return tIDTableEntries_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDTableEntryOrBuilder getTIDTableEntriesOrBuilder(
        int index) {
      return tIDTableEntries_.get(index);
    }

    // repeated .Impinj.STP.OrderedListEntry ordered_list_entries = 15;
    public static final int ORDERED_LIST_ENTRIES_FIELD_NUMBER = 15;
    private java.util.List<com.impinj.stp.StpApi.OrderedListEntry> orderedListEntries_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.OrderedListEntry> getOrderedListEntriesList() {
      return orderedListEntries_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
        getOrderedListEntriesOrBuilderList() {
      return orderedListEntries_;
    }
    /**
     */
    public int getOrderedListEntriesCount() {
      return orderedListEntries_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.OrderedListEntry getOrderedListEntries(int index) {
      return orderedListEntries_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.OrderedListEntryOrBuilder getOrderedListEntriesOrBuilder(
        int index) {
      return orderedListEntries_.get(index);
    }

    // optional .Impinj.STP.VoidTagConfig void_tag_config = 18;
    public static final int VOID_TAG_CONFIG_FIELD_NUMBER = 18;
    private com.impinj.stp.StpApi.VoidTagConfig voidTagConfig_;
    /**
     */
    public boolean hasVoidTagConfig() {
      return ((bitField0_ & 0x00040000) == 0x00040000);
    }
    /**
     */
    public com.impinj.stp.StpApi.VoidTagConfig getVoidTagConfig() {
      return voidTagConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.VoidTagConfigOrBuilder getVoidTagConfigOrBuilder() {
      return voidTagConfig_;
    }

    // optional .Impinj.STP.SerializationJobFilters filters = 19;
    public static final int FILTERS_FIELD_NUMBER = 19;
    private com.impinj.stp.StpApi.SerializationJobFilters filters_;
    /**
     */
    public boolean hasFilters() {
      return ((bitField0_ & 0x00080000) == 0x00080000);
    }
    /**
     */
    public com.impinj.stp.StpApi.SerializationJobFilters getFilters() {
      return filters_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SerializationJobFiltersOrBuilder getFiltersOrBuilder() {
      return filters_;
    }

    private void initFields() {
      jobId_ = 0;
      jobType_ = com.impinj.stp.StpApi.SerializationJobType.SERIALIZATION_JOB_TYPE_STATIC;
      jobCompletionCriteria_ = com.impinj.stp.StpApi.SerializationJobCompletionCriteria.SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE;
      operationQuantity_ = 0;
      ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
      tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
      userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
      blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
      killTag_ = false;
      monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
      monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
      monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
      monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
      tIDTableSize_ = 100;
      tIDTableEntries_ = java.util.Collections.emptyList();
      orderedListEntries_ = java.util.Collections.emptyList();
      voidTagConfig_ = com.impinj.stp.StpApi.VoidTagConfig.getDefaultInstance();
      filters_ = com.impinj.stp.StpApi.SerializationJobFilters.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasJobId()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasJobType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasEPCMemory()) {
        if (!getEPCMemory().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasTIDMemory()) {
        if (!getTIDMemory().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSecurePassword()) {
        if (!getSecurePassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAccessPassword()) {
        if (!getAccessPassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasKillPassword()) {
        if (!getKillPassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasLockConfig()) {
        if (!getLockConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasBlockpermalockConfig()) {
        if (!getBlockpermalockConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getTIDTableEntriesCount(); i++) {
        if (!getTIDTableEntries(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getOrderedListEntriesCount(); i++) {
        if (!getOrderedListEntries(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, jobId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, jobType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, jobCompletionCriteria_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, operationQuantity_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, ePCMemory_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, tIDMemory_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, userMemory_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, securePassword_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(9, accessPassword_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(10, killPassword_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(11, lockConfig_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeMessage(12, blockpermalockConfig_);
      }
      for (int i = 0; i < tIDTableEntries_.size(); i++) {
        output.writeMessage(14, tIDTableEntries_.get(i));
      }
      for (int i = 0; i < orderedListEntries_.size(); i++) {
        output.writeMessage(15, orderedListEntries_.get(i));
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBool(16, killTag_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeUInt32(17, tIDTableSize_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeMessage(18, voidTagConfig_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeMessage(19, filters_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeMessage(20, monzaR6PFeatureConfig_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeMessage(21, monzaS6CFeatureConfig_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeMessage(22, monzaR6FeatureConfig_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeMessage(23, monzaR6AFeatureConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, jobId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, jobType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, jobCompletionCriteria_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, operationQuantity_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, ePCMemory_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, tIDMemory_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, userMemory_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, securePassword_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, accessPassword_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, killPassword_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, lockConfig_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, blockpermalockConfig_);
      }
      for (int i = 0; i < tIDTableEntries_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, tIDTableEntries_.get(i));
      }
      for (int i = 0; i < orderedListEntries_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, orderedListEntries_.get(i));
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, killTag_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(17, tIDTableSize_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, voidTagConfig_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(19, filters_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(20, monzaR6PFeatureConfig_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, monzaS6CFeatureConfig_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(22, monzaR6FeatureConfig_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(23, monzaR6AFeatureConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SerializationJob parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SerializationJob parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SerializationJob prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SerializationJob}
     *
     * What to write and whether to set passwords and lock the tag.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SerializationJobOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJob_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJob_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SerializationJob.class, com.impinj.stp.StpApi.SerializationJob.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SerializationJob.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEPCMemoryFieldBuilder();
          getTIDMemoryFieldBuilder();
          getUserMemoryFieldBuilder();
          getSecurePasswordFieldBuilder();
          getAccessPasswordFieldBuilder();
          getKillPasswordFieldBuilder();
          getLockConfigFieldBuilder();
          getBlockpermalockConfigFieldBuilder();
          getMonzaR6PFeatureConfigFieldBuilder();
          getMonzaS6CFeatureConfigFieldBuilder();
          getMonzaR6FeatureConfigFieldBuilder();
          getMonzaR6AFeatureConfigFieldBuilder();
          getTIDTableEntriesFieldBuilder();
          getOrderedListEntriesFieldBuilder();
          getVoidTagConfigFieldBuilder();
          getFiltersFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        jobId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        jobType_ = com.impinj.stp.StpApi.SerializationJobType.SERIALIZATION_JOB_TYPE_STATIC;
        bitField0_ = (bitField0_ & ~0x00000002);
        jobCompletionCriteria_ = com.impinj.stp.StpApi.SerializationJobCompletionCriteria.SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE;
        bitField0_ = (bitField0_ & ~0x00000004);
        operationQuantity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
        } else {
          ePCMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
        } else {
          tIDMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (securePasswordBuilder_ == null) {
          securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          securePasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          accessPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (killPasswordBuilder_ == null) {
          killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          killPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (lockConfigBuilder_ == null) {
          lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
        } else {
          lockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
        } else {
          blockpermalockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        killTag_ = false;
        bitField0_ = (bitField0_ & ~0x00001000);
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
        } else {
          monzaR6PFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
        } else {
          monzaS6CFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
        } else {
          monzaR6FeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
        } else {
          monzaR6AFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        tIDTableSize_ = 100;
        bitField0_ = (bitField0_ & ~0x00020000);
        if (tIDTableEntriesBuilder_ == null) {
          tIDTableEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
        } else {
          tIDTableEntriesBuilder_.clear();
        }
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00080000);
        } else {
          orderedListEntriesBuilder_.clear();
        }
        if (voidTagConfigBuilder_ == null) {
          voidTagConfig_ = com.impinj.stp.StpApi.VoidTagConfig.getDefaultInstance();
        } else {
          voidTagConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00100000);
        if (filtersBuilder_ == null) {
          filters_ = com.impinj.stp.StpApi.SerializationJobFilters.getDefaultInstance();
        } else {
          filtersBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00200000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerializationJob_descriptor;
      }

      public com.impinj.stp.StpApi.SerializationJob getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SerializationJob.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SerializationJob build() {
        com.impinj.stp.StpApi.SerializationJob result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SerializationJob buildPartial() {
        com.impinj.stp.StpApi.SerializationJob result = new com.impinj.stp.StpApi.SerializationJob(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.jobId_ = jobId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.jobType_ = jobType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.jobCompletionCriteria_ = jobCompletionCriteria_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.operationQuantity_ = operationQuantity_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (ePCMemoryBuilder_ == null) {
          result.ePCMemory_ = ePCMemory_;
        } else {
          result.ePCMemory_ = ePCMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (tIDMemoryBuilder_ == null) {
          result.tIDMemory_ = tIDMemory_;
        } else {
          result.tIDMemory_ = tIDMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (userMemoryBuilder_ == null) {
          result.userMemory_ = userMemory_;
        } else {
          result.userMemory_ = userMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (securePasswordBuilder_ == null) {
          result.securePassword_ = securePassword_;
        } else {
          result.securePassword_ = securePasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (accessPasswordBuilder_ == null) {
          result.accessPassword_ = accessPassword_;
        } else {
          result.accessPassword_ = accessPasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (killPasswordBuilder_ == null) {
          result.killPassword_ = killPassword_;
        } else {
          result.killPassword_ = killPasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (lockConfigBuilder_ == null) {
          result.lockConfig_ = lockConfig_;
        } else {
          result.lockConfig_ = lockConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        if (blockpermalockConfigBuilder_ == null) {
          result.blockpermalockConfig_ = blockpermalockConfig_;
        } else {
          result.blockpermalockConfig_ = blockpermalockConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.killTag_ = killTag_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        if (monzaR6PFeatureConfigBuilder_ == null) {
          result.monzaR6PFeatureConfig_ = monzaR6PFeatureConfig_;
        } else {
          result.monzaR6PFeatureConfig_ = monzaR6PFeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        if (monzaS6CFeatureConfigBuilder_ == null) {
          result.monzaS6CFeatureConfig_ = monzaS6CFeatureConfig_;
        } else {
          result.monzaS6CFeatureConfig_ = monzaS6CFeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        if (monzaR6FeatureConfigBuilder_ == null) {
          result.monzaR6FeatureConfig_ = monzaR6FeatureConfig_;
        } else {
          result.monzaR6FeatureConfig_ = monzaR6FeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        if (monzaR6AFeatureConfigBuilder_ == null) {
          result.monzaR6AFeatureConfig_ = monzaR6AFeatureConfig_;
        } else {
          result.monzaR6AFeatureConfig_ = monzaR6AFeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00020000;
        }
        result.tIDTableSize_ = tIDTableSize_;
        if (tIDTableEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00040000) == 0x00040000)) {
            tIDTableEntries_ = java.util.Collections.unmodifiableList(tIDTableEntries_);
            bitField0_ = (bitField0_ & ~0x00040000);
          }
          result.tIDTableEntries_ = tIDTableEntries_;
        } else {
          result.tIDTableEntries_ = tIDTableEntriesBuilder_.build();
        }
        if (orderedListEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00080000) == 0x00080000)) {
            orderedListEntries_ = java.util.Collections.unmodifiableList(orderedListEntries_);
            bitField0_ = (bitField0_ & ~0x00080000);
          }
          result.orderedListEntries_ = orderedListEntries_;
        } else {
          result.orderedListEntries_ = orderedListEntriesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00040000;
        }
        if (voidTagConfigBuilder_ == null) {
          result.voidTagConfig_ = voidTagConfig_;
        } else {
          result.voidTagConfig_ = voidTagConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
          to_bitField0_ |= 0x00080000;
        }
        if (filtersBuilder_ == null) {
          result.filters_ = filters_;
        } else {
          result.filters_ = filtersBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SerializationJob) {
          return mergeFrom((com.impinj.stp.StpApi.SerializationJob)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SerializationJob other) {
        if (other == com.impinj.stp.StpApi.SerializationJob.getDefaultInstance()) return this;
        if (other.hasJobId()) {
          setJobId(other.getJobId());
        }
        if (other.hasJobType()) {
          setJobType(other.getJobType());
        }
        if (other.hasJobCompletionCriteria()) {
          setJobCompletionCriteria(other.getJobCompletionCriteria());
        }
        if (other.hasOperationQuantity()) {
          setOperationQuantity(other.getOperationQuantity());
        }
        if (other.hasEPCMemory()) {
          mergeEPCMemory(other.getEPCMemory());
        }
        if (other.hasTIDMemory()) {
          mergeTIDMemory(other.getTIDMemory());
        }
        if (other.hasUserMemory()) {
          mergeUserMemory(other.getUserMemory());
        }
        if (other.hasSecurePassword()) {
          mergeSecurePassword(other.getSecurePassword());
        }
        if (other.hasAccessPassword()) {
          mergeAccessPassword(other.getAccessPassword());
        }
        if (other.hasKillPassword()) {
          mergeKillPassword(other.getKillPassword());
        }
        if (other.hasLockConfig()) {
          mergeLockConfig(other.getLockConfig());
        }
        if (other.hasBlockpermalockConfig()) {
          mergeBlockpermalockConfig(other.getBlockpermalockConfig());
        }
        if (other.hasKillTag()) {
          setKillTag(other.getKillTag());
        }
        if (other.hasMonzaR6PFeatureConfig()) {
          mergeMonzaR6PFeatureConfig(other.getMonzaR6PFeatureConfig());
        }
        if (other.hasMonzaS6CFeatureConfig()) {
          mergeMonzaS6CFeatureConfig(other.getMonzaS6CFeatureConfig());
        }
        if (other.hasMonzaR6FeatureConfig()) {
          mergeMonzaR6FeatureConfig(other.getMonzaR6FeatureConfig());
        }
        if (other.hasMonzaR6AFeatureConfig()) {
          mergeMonzaR6AFeatureConfig(other.getMonzaR6AFeatureConfig());
        }
        if (other.hasTIDTableSize()) {
          setTIDTableSize(other.getTIDTableSize());
        }
        if (tIDTableEntriesBuilder_ == null) {
          if (!other.tIDTableEntries_.isEmpty()) {
            if (tIDTableEntries_.isEmpty()) {
              tIDTableEntries_ = other.tIDTableEntries_;
              bitField0_ = (bitField0_ & ~0x00040000);
            } else {
              ensureTIDTableEntriesIsMutable();
              tIDTableEntries_.addAll(other.tIDTableEntries_);
            }
            onChanged();
          }
        } else {
          if (!other.tIDTableEntries_.isEmpty()) {
            if (tIDTableEntriesBuilder_.isEmpty()) {
              tIDTableEntriesBuilder_.dispose();
              tIDTableEntriesBuilder_ = null;
              tIDTableEntries_ = other.tIDTableEntries_;
              bitField0_ = (bitField0_ & ~0x00040000);
              tIDTableEntriesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTIDTableEntriesFieldBuilder() : null;
            } else {
              tIDTableEntriesBuilder_.addAllMessages(other.tIDTableEntries_);
            }
          }
        }
        if (orderedListEntriesBuilder_ == null) {
          if (!other.orderedListEntries_.isEmpty()) {
            if (orderedListEntries_.isEmpty()) {
              orderedListEntries_ = other.orderedListEntries_;
              bitField0_ = (bitField0_ & ~0x00080000);
            } else {
              ensureOrderedListEntriesIsMutable();
              orderedListEntries_.addAll(other.orderedListEntries_);
            }
            onChanged();
          }
        } else {
          if (!other.orderedListEntries_.isEmpty()) {
            if (orderedListEntriesBuilder_.isEmpty()) {
              orderedListEntriesBuilder_.dispose();
              orderedListEntriesBuilder_ = null;
              orderedListEntries_ = other.orderedListEntries_;
              bitField0_ = (bitField0_ & ~0x00080000);
              orderedListEntriesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getOrderedListEntriesFieldBuilder() : null;
            } else {
              orderedListEntriesBuilder_.addAllMessages(other.orderedListEntries_);
            }
          }
        }
        if (other.hasVoidTagConfig()) {
          mergeVoidTagConfig(other.getVoidTagConfig());
        }
        if (other.hasFilters()) {
          mergeFilters(other.getFilters());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasJobId()) {
          
          return false;
        }
        if (!hasJobType()) {
          
          return false;
        }
        if (hasEPCMemory()) {
          if (!getEPCMemory().isInitialized()) {
            
            return false;
          }
        }
        if (hasTIDMemory()) {
          if (!getTIDMemory().isInitialized()) {
            
            return false;
          }
        }
        if (hasSecurePassword()) {
          if (!getSecurePassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasAccessPassword()) {
          if (!getAccessPassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasKillPassword()) {
          if (!getKillPassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasLockConfig()) {
          if (!getLockConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasBlockpermalockConfig()) {
          if (!getBlockpermalockConfig().isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getTIDTableEntriesCount(); i++) {
          if (!getTIDTableEntries(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getOrderedListEntriesCount(); i++) {
          if (!getOrderedListEntries(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SerializationJob parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SerializationJob) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required uint32 job_id = 1;
      private int jobId_ ;
      /**
       */
      public boolean hasJobId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public int getJobId() {
        return jobId_;
      }
      /**
       */
      public Builder setJobId(int value) {
        bitField0_ |= 0x00000001;
        jobId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearJobId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        jobId_ = 0;
        onChanged();
        return this;
      }

      // required .Impinj.STP.SerializationJobType job_type = 2;
      private com.impinj.stp.StpApi.SerializationJobType jobType_ = com.impinj.stp.StpApi.SerializationJobType.SERIALIZATION_JOB_TYPE_STATIC;
      /**
       */
      public boolean hasJobType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJobType getJobType() {
        return jobType_;
      }
      /**
       */
      public Builder setJobType(com.impinj.stp.StpApi.SerializationJobType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        jobType_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearJobType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        jobType_ = com.impinj.stp.StpApi.SerializationJobType.SERIALIZATION_JOB_TYPE_STATIC;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.SerializationJobCompletionCriteria job_completion_criteria = 3 [default = SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE];
      private com.impinj.stp.StpApi.SerializationJobCompletionCriteria jobCompletionCriteria_ = com.impinj.stp.StpApi.SerializationJobCompletionCriteria.SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE;
      /**
       */
      public boolean hasJobCompletionCriteria() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJobCompletionCriteria getJobCompletionCriteria() {
        return jobCompletionCriteria_;
      }
      /**
       */
      public Builder setJobCompletionCriteria(com.impinj.stp.StpApi.SerializationJobCompletionCriteria value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        jobCompletionCriteria_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearJobCompletionCriteria() {
        bitField0_ = (bitField0_ & ~0x00000004);
        jobCompletionCriteria_ = com.impinj.stp.StpApi.SerializationJobCompletionCriteria.SERIALIZATION_JOB_COMPLETION_CRITERIA_NONE;
        onChanged();
        return this;
      }

      // optional uint32 operation_quantity = 4;
      private int operationQuantity_ ;
      /**
       *
       * NOT YET SUPPORTED
       */
      public boolean hasOperationQuantity() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public int getOperationQuantity() {
        return operationQuantity_;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder setOperationQuantity(int value) {
        bitField0_ |= 0x00000008;
        operationQuantity_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder clearOperationQuantity() {
        bitField0_ = (bitField0_ & ~0x00000008);
        operationQuantity_ = 0;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.EPCMemory EPC_memory = 5;
      private com.impinj.stp.StpApi.EPCMemory ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder> ePCMemoryBuilder_;
      /**
       */
      public boolean hasEPCMemory() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public com.impinj.stp.StpApi.EPCMemory getEPCMemory() {
        if (ePCMemoryBuilder_ == null) {
          return ePCMemory_;
        } else {
          return ePCMemoryBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setEPCMemory(com.impinj.stp.StpApi.EPCMemory value) {
        if (ePCMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ePCMemory_ = value;
          onChanged();
        } else {
          ePCMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder setEPCMemory(
          com.impinj.stp.StpApi.EPCMemory.Builder builderForValue) {
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = builderForValue.build();
          onChanged();
        } else {
          ePCMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder mergeEPCMemory(com.impinj.stp.StpApi.EPCMemory value) {
        if (ePCMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              ePCMemory_ != com.impinj.stp.StpApi.EPCMemory.getDefaultInstance()) {
            ePCMemory_ =
              com.impinj.stp.StpApi.EPCMemory.newBuilder(ePCMemory_).mergeFrom(value).buildPartial();
          } else {
            ePCMemory_ = value;
          }
          onChanged();
        } else {
          ePCMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder clearEPCMemory() {
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
          onChanged();
        } else {
          ePCMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.EPCMemory.Builder getEPCMemoryBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getEPCMemoryFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder() {
        if (ePCMemoryBuilder_ != null) {
          return ePCMemoryBuilder_.getMessageOrBuilder();
        } else {
          return ePCMemory_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder> 
          getEPCMemoryFieldBuilder() {
        if (ePCMemoryBuilder_ == null) {
          ePCMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder>(
                  ePCMemory_,
                  getParentForChildren(),
                  isClean());
          ePCMemory_ = null;
        }
        return ePCMemoryBuilder_;
      }

      // optional .Impinj.STP.TIDMemory TID_memory = 6;
      private com.impinj.stp.StpApi.TIDMemory tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder> tIDMemoryBuilder_;
      /**
       */
      public boolean hasTIDMemory() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDMemory getTIDMemory() {
        if (tIDMemoryBuilder_ == null) {
          return tIDMemory_;
        } else {
          return tIDMemoryBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTIDMemory(com.impinj.stp.StpApi.TIDMemory value) {
        if (tIDMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tIDMemory_ = value;
          onChanged();
        } else {
          tIDMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setTIDMemory(
          com.impinj.stp.StpApi.TIDMemory.Builder builderForValue) {
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = builderForValue.build();
          onChanged();
        } else {
          tIDMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeTIDMemory(com.impinj.stp.StpApi.TIDMemory value) {
        if (tIDMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              tIDMemory_ != com.impinj.stp.StpApi.TIDMemory.getDefaultInstance()) {
            tIDMemory_ =
              com.impinj.stp.StpApi.TIDMemory.newBuilder(tIDMemory_).mergeFrom(value).buildPartial();
          } else {
            tIDMemory_ = value;
          }
          onChanged();
        } else {
          tIDMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearTIDMemory() {
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
          onChanged();
        } else {
          tIDMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDMemory.Builder getTIDMemoryBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getTIDMemoryFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder() {
        if (tIDMemoryBuilder_ != null) {
          return tIDMemoryBuilder_.getMessageOrBuilder();
        } else {
          return tIDMemory_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder> 
          getTIDMemoryFieldBuilder() {
        if (tIDMemoryBuilder_ == null) {
          tIDMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder>(
                  tIDMemory_,
                  getParentForChildren(),
                  isClean());
          tIDMemory_ = null;
        }
        return tIDMemoryBuilder_;
      }

      // optional .Impinj.STP.UserMemory user_memory = 7;
      private com.impinj.stp.StpApi.UserMemory userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> userMemoryBuilder_;
      /**
       */
      public boolean hasUserMemory() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory getUserMemory() {
        if (userMemoryBuilder_ == null) {
          return userMemory_;
        } else {
          return userMemoryBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          userMemory_ = value;
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder setUserMemory(
          com.impinj.stp.StpApi.UserMemory.Builder builderForValue) {
        if (userMemoryBuilder_ == null) {
          userMemory_ = builderForValue.build();
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder mergeUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              userMemory_ != com.impinj.stp.StpApi.UserMemory.getDefaultInstance()) {
            userMemory_ =
              com.impinj.stp.StpApi.UserMemory.newBuilder(userMemory_).mergeFrom(value).buildPartial();
          } else {
            userMemory_ = value;
          }
          onChanged();
        } else {
          userMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder clearUserMemory() {
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
          onChanged();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory.Builder getUserMemoryBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getUserMemoryFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
        if (userMemoryBuilder_ != null) {
          return userMemoryBuilder_.getMessageOrBuilder();
        } else {
          return userMemory_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> 
          getUserMemoryFieldBuilder() {
        if (userMemoryBuilder_ == null) {
          userMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder>(
                  userMemory_,
                  getParentForChildren(),
                  isClean());
          userMemory_ = null;
        }
        return userMemoryBuilder_;
      }

      // optional .Impinj.STP.Password secure_password = 8;
      private com.impinj.stp.StpApi.Password securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> securePasswordBuilder_;
      /**
       */
      public boolean hasSecurePassword() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getSecurePassword() {
        if (securePasswordBuilder_ == null) {
          return securePassword_;
        } else {
          return securePasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSecurePassword(com.impinj.stp.StpApi.Password value) {
        if (securePasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          securePassword_ = value;
          onChanged();
        } else {
          securePasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder setSecurePassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (securePasswordBuilder_ == null) {
          securePassword_ = builderForValue.build();
          onChanged();
        } else {
          securePasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder mergeSecurePassword(com.impinj.stp.StpApi.Password value) {
        if (securePasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              securePassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            securePassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(securePassword_).mergeFrom(value).buildPartial();
          } else {
            securePassword_ = value;
          }
          onChanged();
        } else {
          securePasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder clearSecurePassword() {
        if (securePasswordBuilder_ == null) {
          securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          securePasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getSecurePasswordBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getSecurePasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder() {
        if (securePasswordBuilder_ != null) {
          return securePasswordBuilder_.getMessageOrBuilder();
        } else {
          return securePassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getSecurePasswordFieldBuilder() {
        if (securePasswordBuilder_ == null) {
          securePasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  securePassword_,
                  getParentForChildren(),
                  isClean());
          securePassword_ = null;
        }
        return securePasswordBuilder_;
      }

      // optional .Impinj.STP.Password access_password = 9;
      private com.impinj.stp.StpApi.Password accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> accessPasswordBuilder_;
      /**
       */
      public boolean hasAccessPassword() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getAccessPassword() {
        if (accessPasswordBuilder_ == null) {
          return accessPassword_;
        } else {
          return accessPasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAccessPassword(com.impinj.stp.StpApi.Password value) {
        if (accessPasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          accessPassword_ = value;
          onChanged();
        } else {
          accessPasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder setAccessPassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = builderForValue.build();
          onChanged();
        } else {
          accessPasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder mergeAccessPassword(com.impinj.stp.StpApi.Password value) {
        if (accessPasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              accessPassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            accessPassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(accessPassword_).mergeFrom(value).buildPartial();
          } else {
            accessPassword_ = value;
          }
          onChanged();
        } else {
          accessPasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder clearAccessPassword() {
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          accessPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getAccessPasswordBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getAccessPasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder() {
        if (accessPasswordBuilder_ != null) {
          return accessPasswordBuilder_.getMessageOrBuilder();
        } else {
          return accessPassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getAccessPasswordFieldBuilder() {
        if (accessPasswordBuilder_ == null) {
          accessPasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  accessPassword_,
                  getParentForChildren(),
                  isClean());
          accessPassword_ = null;
        }
        return accessPasswordBuilder_;
      }

      // optional .Impinj.STP.Password kill_password = 10;
      private com.impinj.stp.StpApi.Password killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> killPasswordBuilder_;
      /**
       */
      public boolean hasKillPassword() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getKillPassword() {
        if (killPasswordBuilder_ == null) {
          return killPassword_;
        } else {
          return killPasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setKillPassword(com.impinj.stp.StpApi.Password value) {
        if (killPasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          killPassword_ = value;
          onChanged();
        } else {
          killPasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder setKillPassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (killPasswordBuilder_ == null) {
          killPassword_ = builderForValue.build();
          onChanged();
        } else {
          killPasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder mergeKillPassword(com.impinj.stp.StpApi.Password value) {
        if (killPasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              killPassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            killPassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(killPassword_).mergeFrom(value).buildPartial();
          } else {
            killPassword_ = value;
          }
          onChanged();
        } else {
          killPasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder clearKillPassword() {
        if (killPasswordBuilder_ == null) {
          killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          killPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getKillPasswordBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getKillPasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder() {
        if (killPasswordBuilder_ != null) {
          return killPasswordBuilder_.getMessageOrBuilder();
        } else {
          return killPassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getKillPasswordFieldBuilder() {
        if (killPasswordBuilder_ == null) {
          killPasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  killPassword_,
                  getParentForChildren(),
                  isClean());
          killPassword_ = null;
        }
        return killPasswordBuilder_;
      }

      // optional .Impinj.STP.LockConfig lock_config = 11;
      private com.impinj.stp.StpApi.LockConfig lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder> lockConfigBuilder_;
      /**
       */
      public boolean hasLockConfig() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfig getLockConfig() {
        if (lockConfigBuilder_ == null) {
          return lockConfig_;
        } else {
          return lockConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setLockConfig(com.impinj.stp.StpApi.LockConfig value) {
        if (lockConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          lockConfig_ = value;
          onChanged();
        } else {
          lockConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder setLockConfig(
          com.impinj.stp.StpApi.LockConfig.Builder builderForValue) {
        if (lockConfigBuilder_ == null) {
          lockConfig_ = builderForValue.build();
          onChanged();
        } else {
          lockConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder mergeLockConfig(com.impinj.stp.StpApi.LockConfig value) {
        if (lockConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              lockConfig_ != com.impinj.stp.StpApi.LockConfig.getDefaultInstance()) {
            lockConfig_ =
              com.impinj.stp.StpApi.LockConfig.newBuilder(lockConfig_).mergeFrom(value).buildPartial();
          } else {
            lockConfig_ = value;
          }
          onChanged();
        } else {
          lockConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder clearLockConfig() {
        if (lockConfigBuilder_ == null) {
          lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
          onChanged();
        } else {
          lockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfig.Builder getLockConfigBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getLockConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder() {
        if (lockConfigBuilder_ != null) {
          return lockConfigBuilder_.getMessageOrBuilder();
        } else {
          return lockConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder> 
          getLockConfigFieldBuilder() {
        if (lockConfigBuilder_ == null) {
          lockConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder>(
                  lockConfig_,
                  getParentForChildren(),
                  isClean());
          lockConfig_ = null;
        }
        return lockConfigBuilder_;
      }

      // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 12;
      private com.impinj.stp.StpApi.BlockPermalockConfig blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder> blockpermalockConfigBuilder_;
      /**
       *
       * NOT YET SUPPORTED
       */
      public boolean hasBlockpermalockConfig() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig() {
        if (blockpermalockConfigBuilder_ == null) {
          return blockpermalockConfig_;
        } else {
          return blockpermalockConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder setBlockpermalockConfig(com.impinj.stp.StpApi.BlockPermalockConfig value) {
        if (blockpermalockConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          blockpermalockConfig_ = value;
          onChanged();
        } else {
          blockpermalockConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder setBlockpermalockConfig(
          com.impinj.stp.StpApi.BlockPermalockConfig.Builder builderForValue) {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = builderForValue.build();
          onChanged();
        } else {
          blockpermalockConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder mergeBlockpermalockConfig(com.impinj.stp.StpApi.BlockPermalockConfig value) {
        if (blockpermalockConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              blockpermalockConfig_ != com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance()) {
            blockpermalockConfig_ =
              com.impinj.stp.StpApi.BlockPermalockConfig.newBuilder(blockpermalockConfig_).mergeFrom(value).buildPartial();
          } else {
            blockpermalockConfig_ = value;
          }
          onChanged();
        } else {
          blockpermalockConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder clearBlockpermalockConfig() {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
          onChanged();
        } else {
          blockpermalockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfig.Builder getBlockpermalockConfigBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getBlockpermalockConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder() {
        if (blockpermalockConfigBuilder_ != null) {
          return blockpermalockConfigBuilder_.getMessageOrBuilder();
        } else {
          return blockpermalockConfig_;
        }
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder> 
          getBlockpermalockConfigFieldBuilder() {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder>(
                  blockpermalockConfig_,
                  getParentForChildren(),
                  isClean());
          blockpermalockConfig_ = null;
        }
        return blockpermalockConfigBuilder_;
      }

      // optional bool kill_tag = 16;
      private boolean killTag_ ;
      /**
       *
       * optional    MonzaQT                             monza_QT
       * = 13;
       */
      public boolean hasKillTag() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       *
       * optional    MonzaQT                             monza_QT
       * = 13;
       */
      public boolean getKillTag() {
        return killTag_;
      }
      /**
       *
       * optional    MonzaQT                             monza_QT
       * = 13;
       */
      public Builder setKillTag(boolean value) {
        bitField0_ |= 0x00001000;
        killTag_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * optional    MonzaQT                             monza_QT
       * = 13;
       */
      public Builder clearKillTag() {
        bitField0_ = (bitField0_ & ~0x00001000);
        killTag_ = false;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 20;
      private com.impinj.stp.StpApi.MonzaR6PFeatureConfig monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder> monzaR6PFeatureConfigBuilder_;
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6PFeatureConfig() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          return monzaR6PFeatureConfig_;
        } else {
          return monzaR6PFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6PFeatureConfig(com.impinj.stp.StpApi.MonzaR6PFeatureConfig value) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6PFeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6PFeatureConfig(
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder builderForValue) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6PFeatureConfig(com.impinj.stp.StpApi.MonzaR6PFeatureConfig value) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000) &&
              monzaR6PFeatureConfig_ != com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance()) {
            monzaR6PFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig.newBuilder(monzaR6PFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6PFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6PFeatureConfig() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder getMonzaR6PFeatureConfigBuilder() {
        bitField0_ |= 0x00002000;
        onChanged();
        return getMonzaR6PFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder() {
        if (monzaR6PFeatureConfigBuilder_ != null) {
          return monzaR6PFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6PFeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder> 
          getMonzaR6PFeatureConfigFieldBuilder() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder>(
                  monzaR6PFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6PFeatureConfig_ = null;
        }
        return monzaR6PFeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 21;
      private com.impinj.stp.StpApi.MonzaS6CFeatureConfig monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder> monzaS6CFeatureConfigBuilder_;
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaS6CFeatureConfig() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          return monzaS6CFeatureConfig_;
        } else {
          return monzaS6CFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaS6CFeatureConfig(com.impinj.stp.StpApi.MonzaS6CFeatureConfig value) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaS6CFeatureConfig_ = value;
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaS6CFeatureConfig(
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder builderForValue) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaS6CFeatureConfig(com.impinj.stp.StpApi.MonzaS6CFeatureConfig value) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000) &&
              monzaS6CFeatureConfig_ != com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance()) {
            monzaS6CFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig.newBuilder(monzaS6CFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaS6CFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaS6CFeatureConfig() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder getMonzaS6CFeatureConfigBuilder() {
        bitField0_ |= 0x00004000;
        onChanged();
        return getMonzaS6CFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder() {
        if (monzaS6CFeatureConfigBuilder_ != null) {
          return monzaS6CFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaS6CFeatureConfig_;
        }
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder> 
          getMonzaS6CFeatureConfigFieldBuilder() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder>(
                  monzaS6CFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaS6CFeatureConfig_ = null;
        }
        return monzaS6CFeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 22;
      private com.impinj.stp.StpApi.MonzaR6FeatureConfig monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder> monzaR6FeatureConfigBuilder_;
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6FeatureConfig() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          return monzaR6FeatureConfig_;
        } else {
          return monzaR6FeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6FeatureConfig(com.impinj.stp.StpApi.MonzaR6FeatureConfig value) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6FeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6FeatureConfig(
          com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder builderForValue) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6FeatureConfig(com.impinj.stp.StpApi.MonzaR6FeatureConfig value) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000) &&
              monzaR6FeatureConfig_ != com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance()) {
            monzaR6FeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6FeatureConfig.newBuilder(monzaR6FeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6FeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6FeatureConfig() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder getMonzaR6FeatureConfigBuilder() {
        bitField0_ |= 0x00008000;
        onChanged();
        return getMonzaR6FeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder() {
        if (monzaR6FeatureConfigBuilder_ != null) {
          return monzaR6FeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6FeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder> 
          getMonzaR6FeatureConfigFieldBuilder() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder>(
                  monzaR6FeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6FeatureConfig_ = null;
        }
        return monzaR6FeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 23;
      private com.impinj.stp.StpApi.MonzaR6AFeatureConfig monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder> monzaR6AFeatureConfigBuilder_;
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6AFeatureConfig() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          return monzaR6AFeatureConfig_;
        } else {
          return monzaR6AFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6AFeatureConfig(com.impinj.stp.StpApi.MonzaR6AFeatureConfig value) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6AFeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6AFeatureConfig(
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder builderForValue) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6AFeatureConfig(com.impinj.stp.StpApi.MonzaR6AFeatureConfig value) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000) &&
              monzaR6AFeatureConfig_ != com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance()) {
            monzaR6AFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig.newBuilder(monzaR6AFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6AFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6AFeatureConfig() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder getMonzaR6AFeatureConfigBuilder() {
        bitField0_ |= 0x00010000;
        onChanged();
        return getMonzaR6AFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder() {
        if (monzaR6AFeatureConfigBuilder_ != null) {
          return monzaR6AFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6AFeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder> 
          getMonzaR6AFeatureConfigFieldBuilder() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder>(
                  monzaR6AFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6AFeatureConfig_ = null;
        }
        return monzaR6AFeatureConfigBuilder_;
      }

      // optional uint32 TID_table_size = 17 [default = 100];
      private int tIDTableSize_ = 100;
      /**
       */
      public boolean hasTIDTableSize() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       */
      public int getTIDTableSize() {
        return tIDTableSize_;
      }
      /**
       */
      public Builder setTIDTableSize(int value) {
        bitField0_ |= 0x00020000;
        tIDTableSize_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTIDTableSize() {
        bitField0_ = (bitField0_ & ~0x00020000);
        tIDTableSize_ = 100;
        onChanged();
        return this;
      }

      // repeated .Impinj.STP.TIDTableEntry TID_table_entries = 14;
      private java.util.List<com.impinj.stp.StpApi.TIDTableEntry> tIDTableEntries_ =
        java.util.Collections.emptyList();
      private void ensureTIDTableEntriesIsMutable() {
        if (!((bitField0_ & 0x00040000) == 0x00040000)) {
          tIDTableEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.TIDTableEntry>(tIDTableEntries_);
          bitField0_ |= 0x00040000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.TIDTableEntry, com.impinj.stp.StpApi.TIDTableEntry.Builder, com.impinj.stp.StpApi.TIDTableEntryOrBuilder> tIDTableEntriesBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.TIDTableEntry> getTIDTableEntriesList() {
        if (tIDTableEntriesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tIDTableEntries_);
        } else {
          return tIDTableEntriesBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getTIDTableEntriesCount() {
        if (tIDTableEntriesBuilder_ == null) {
          return tIDTableEntries_.size();
        } else {
          return tIDTableEntriesBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry getTIDTableEntries(int index) {
        if (tIDTableEntriesBuilder_ == null) {
          return tIDTableEntries_.get(index);
        } else {
          return tIDTableEntriesBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setTIDTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry value) {
        if (tIDTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTIDTableEntriesIsMutable();
          tIDTableEntries_.set(index, value);
          onChanged();
        } else {
          tIDTableEntriesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setTIDTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry.Builder builderForValue) {
        if (tIDTableEntriesBuilder_ == null) {
          ensureTIDTableEntriesIsMutable();
          tIDTableEntries_.set(index, builderForValue.build());
          onChanged();
        } else {
          tIDTableEntriesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTIDTableEntries(com.impinj.stp.StpApi.TIDTableEntry value) {
        if (tIDTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTIDTableEntriesIsMutable();
          tIDTableEntries_.add(value);
          onChanged();
        } else {
          tIDTableEntriesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addTIDTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry value) {
        if (tIDTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTIDTableEntriesIsMutable();
          tIDTableEntries_.add(index, value);
          onChanged();
        } else {
          tIDTableEntriesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addTIDTableEntries(
          com.impinj.stp.StpApi.TIDTableEntry.Builder builderForValue) {
        if (tIDTableEntriesBuilder_ == null) {
          ensureTIDTableEntriesIsMutable();
          tIDTableEntries_.add(builderForValue.build());
          onChanged();
        } else {
          tIDTableEntriesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTIDTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry.Builder builderForValue) {
        if (tIDTableEntriesBuilder_ == null) {
          ensureTIDTableEntriesIsMutable();
          tIDTableEntries_.add(index, builderForValue.build());
          onChanged();
        } else {
          tIDTableEntriesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllTIDTableEntries(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.TIDTableEntry> values) {
        if (tIDTableEntriesBuilder_ == null) {
          ensureTIDTableEntriesIsMutable();
          super.addAll(values, tIDTableEntries_);
          onChanged();
        } else {
          tIDTableEntriesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearTIDTableEntries() {
        if (tIDTableEntriesBuilder_ == null) {
          tIDTableEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00040000);
          onChanged();
        } else {
          tIDTableEntriesBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeTIDTableEntries(int index) {
        if (tIDTableEntriesBuilder_ == null) {
          ensureTIDTableEntriesIsMutable();
          tIDTableEntries_.remove(index);
          onChanged();
        } else {
          tIDTableEntriesBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry.Builder getTIDTableEntriesBuilder(
          int index) {
        return getTIDTableEntriesFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntryOrBuilder getTIDTableEntriesOrBuilder(
          int index) {
        if (tIDTableEntriesBuilder_ == null) {
          return tIDTableEntries_.get(index);  } else {
          return tIDTableEntriesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
           getTIDTableEntriesOrBuilderList() {
        if (tIDTableEntriesBuilder_ != null) {
          return tIDTableEntriesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tIDTableEntries_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry.Builder addTIDTableEntriesBuilder() {
        return getTIDTableEntriesFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.TIDTableEntry.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry.Builder addTIDTableEntriesBuilder(
          int index) {
        return getTIDTableEntriesFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.TIDTableEntry.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.TIDTableEntry.Builder> 
           getTIDTableEntriesBuilderList() {
        return getTIDTableEntriesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.TIDTableEntry, com.impinj.stp.StpApi.TIDTableEntry.Builder, com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
          getTIDTableEntriesFieldBuilder() {
        if (tIDTableEntriesBuilder_ == null) {
          tIDTableEntriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.TIDTableEntry, com.impinj.stp.StpApi.TIDTableEntry.Builder, com.impinj.stp.StpApi.TIDTableEntryOrBuilder>(
                  tIDTableEntries_,
                  ((bitField0_ & 0x00040000) == 0x00040000),
                  getParentForChildren(),
                  isClean());
          tIDTableEntries_ = null;
        }
        return tIDTableEntriesBuilder_;
      }

      // repeated .Impinj.STP.OrderedListEntry ordered_list_entries = 15;
      private java.util.List<com.impinj.stp.StpApi.OrderedListEntry> orderedListEntries_ =
        java.util.Collections.emptyList();
      private void ensureOrderedListEntriesIsMutable() {
        if (!((bitField0_ & 0x00080000) == 0x00080000)) {
          orderedListEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.OrderedListEntry>(orderedListEntries_);
          bitField0_ |= 0x00080000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.OrderedListEntry, com.impinj.stp.StpApi.OrderedListEntry.Builder, com.impinj.stp.StpApi.OrderedListEntryOrBuilder> orderedListEntriesBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.OrderedListEntry> getOrderedListEntriesList() {
        if (orderedListEntriesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(orderedListEntries_);
        } else {
          return orderedListEntriesBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getOrderedListEntriesCount() {
        if (orderedListEntriesBuilder_ == null) {
          return orderedListEntries_.size();
        } else {
          return orderedListEntriesBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry getOrderedListEntries(int index) {
        if (orderedListEntriesBuilder_ == null) {
          return orderedListEntries_.get(index);
        } else {
          return orderedListEntriesBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry value) {
        if (orderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.set(index, value);
          onChanged();
        } else {
          orderedListEntriesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry.Builder builderForValue) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.set(index, builderForValue.build());
          onChanged();
        } else {
          orderedListEntriesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(com.impinj.stp.StpApi.OrderedListEntry value) {
        if (orderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(value);
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry value) {
        if (orderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(index, value);
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(
          com.impinj.stp.StpApi.OrderedListEntry.Builder builderForValue) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(builderForValue.build());
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry.Builder builderForValue) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(index, builderForValue.build());
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllOrderedListEntries(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.OrderedListEntry> values) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          super.addAll(values, orderedListEntries_);
          onChanged();
        } else {
          orderedListEntriesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearOrderedListEntries() {
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00080000);
          onChanged();
        } else {
          orderedListEntriesBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeOrderedListEntries(int index) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.remove(index);
          onChanged();
        } else {
          orderedListEntriesBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry.Builder getOrderedListEntriesBuilder(
          int index) {
        return getOrderedListEntriesFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntryOrBuilder getOrderedListEntriesOrBuilder(
          int index) {
        if (orderedListEntriesBuilder_ == null) {
          return orderedListEntries_.get(index);  } else {
          return orderedListEntriesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
           getOrderedListEntriesOrBuilderList() {
        if (orderedListEntriesBuilder_ != null) {
          return orderedListEntriesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(orderedListEntries_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry.Builder addOrderedListEntriesBuilder() {
        return getOrderedListEntriesFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.OrderedListEntry.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry.Builder addOrderedListEntriesBuilder(
          int index) {
        return getOrderedListEntriesFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.OrderedListEntry.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.OrderedListEntry.Builder> 
           getOrderedListEntriesBuilderList() {
        return getOrderedListEntriesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.OrderedListEntry, com.impinj.stp.StpApi.OrderedListEntry.Builder, com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
          getOrderedListEntriesFieldBuilder() {
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.OrderedListEntry, com.impinj.stp.StpApi.OrderedListEntry.Builder, com.impinj.stp.StpApi.OrderedListEntryOrBuilder>(
                  orderedListEntries_,
                  ((bitField0_ & 0x00080000) == 0x00080000),
                  getParentForChildren(),
                  isClean());
          orderedListEntries_ = null;
        }
        return orderedListEntriesBuilder_;
      }

      // optional .Impinj.STP.VoidTagConfig void_tag_config = 18;
      private com.impinj.stp.StpApi.VoidTagConfig voidTagConfig_ = com.impinj.stp.StpApi.VoidTagConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.VoidTagConfig, com.impinj.stp.StpApi.VoidTagConfig.Builder, com.impinj.stp.StpApi.VoidTagConfigOrBuilder> voidTagConfigBuilder_;
      /**
       */
      public boolean hasVoidTagConfig() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       */
      public com.impinj.stp.StpApi.VoidTagConfig getVoidTagConfig() {
        if (voidTagConfigBuilder_ == null) {
          return voidTagConfig_;
        } else {
          return voidTagConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setVoidTagConfig(com.impinj.stp.StpApi.VoidTagConfig value) {
        if (voidTagConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          voidTagConfig_ = value;
          onChanged();
        } else {
          voidTagConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       */
      public Builder setVoidTagConfig(
          com.impinj.stp.StpApi.VoidTagConfig.Builder builderForValue) {
        if (voidTagConfigBuilder_ == null) {
          voidTagConfig_ = builderForValue.build();
          onChanged();
        } else {
          voidTagConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       */
      public Builder mergeVoidTagConfig(com.impinj.stp.StpApi.VoidTagConfig value) {
        if (voidTagConfigBuilder_ == null) {
          if (((bitField0_ & 0x00100000) == 0x00100000) &&
              voidTagConfig_ != com.impinj.stp.StpApi.VoidTagConfig.getDefaultInstance()) {
            voidTagConfig_ =
              com.impinj.stp.StpApi.VoidTagConfig.newBuilder(voidTagConfig_).mergeFrom(value).buildPartial();
          } else {
            voidTagConfig_ = value;
          }
          onChanged();
        } else {
          voidTagConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       */
      public Builder clearVoidTagConfig() {
        if (voidTagConfigBuilder_ == null) {
          voidTagConfig_ = com.impinj.stp.StpApi.VoidTagConfig.getDefaultInstance();
          onChanged();
        } else {
          voidTagConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00100000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.VoidTagConfig.Builder getVoidTagConfigBuilder() {
        bitField0_ |= 0x00100000;
        onChanged();
        return getVoidTagConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.VoidTagConfigOrBuilder getVoidTagConfigOrBuilder() {
        if (voidTagConfigBuilder_ != null) {
          return voidTagConfigBuilder_.getMessageOrBuilder();
        } else {
          return voidTagConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.VoidTagConfig, com.impinj.stp.StpApi.VoidTagConfig.Builder, com.impinj.stp.StpApi.VoidTagConfigOrBuilder> 
          getVoidTagConfigFieldBuilder() {
        if (voidTagConfigBuilder_ == null) {
          voidTagConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.VoidTagConfig, com.impinj.stp.StpApi.VoidTagConfig.Builder, com.impinj.stp.StpApi.VoidTagConfigOrBuilder>(
                  voidTagConfig_,
                  getParentForChildren(),
                  isClean());
          voidTagConfig_ = null;
        }
        return voidTagConfigBuilder_;
      }

      // optional .Impinj.STP.SerializationJobFilters filters = 19;
      private com.impinj.stp.StpApi.SerializationJobFilters filters_ = com.impinj.stp.StpApi.SerializationJobFilters.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SerializationJobFilters, com.impinj.stp.StpApi.SerializationJobFilters.Builder, com.impinj.stp.StpApi.SerializationJobFiltersOrBuilder> filtersBuilder_;
      /**
       */
      public boolean hasFilters() {
        return ((bitField0_ & 0x00200000) == 0x00200000);
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJobFilters getFilters() {
        if (filtersBuilder_ == null) {
          return filters_;
        } else {
          return filtersBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setFilters(com.impinj.stp.StpApi.SerializationJobFilters value) {
        if (filtersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filters_ = value;
          onChanged();
        } else {
          filtersBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00200000;
        return this;
      }
      /**
       */
      public Builder setFilters(
          com.impinj.stp.StpApi.SerializationJobFilters.Builder builderForValue) {
        if (filtersBuilder_ == null) {
          filters_ = builderForValue.build();
          onChanged();
        } else {
          filtersBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00200000;
        return this;
      }
      /**
       */
      public Builder mergeFilters(com.impinj.stp.StpApi.SerializationJobFilters value) {
        if (filtersBuilder_ == null) {
          if (((bitField0_ & 0x00200000) == 0x00200000) &&
              filters_ != com.impinj.stp.StpApi.SerializationJobFilters.getDefaultInstance()) {
            filters_ =
              com.impinj.stp.StpApi.SerializationJobFilters.newBuilder(filters_).mergeFrom(value).buildPartial();
          } else {
            filters_ = value;
          }
          onChanged();
        } else {
          filtersBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00200000;
        return this;
      }
      /**
       */
      public Builder clearFilters() {
        if (filtersBuilder_ == null) {
          filters_ = com.impinj.stp.StpApi.SerializationJobFilters.getDefaultInstance();
          onChanged();
        } else {
          filtersBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00200000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJobFilters.Builder getFiltersBuilder() {
        bitField0_ |= 0x00200000;
        onChanged();
        return getFiltersFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJobFiltersOrBuilder getFiltersOrBuilder() {
        if (filtersBuilder_ != null) {
          return filtersBuilder_.getMessageOrBuilder();
        } else {
          return filters_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SerializationJobFilters, com.impinj.stp.StpApi.SerializationJobFilters.Builder, com.impinj.stp.StpApi.SerializationJobFiltersOrBuilder> 
          getFiltersFieldBuilder() {
        if (filtersBuilder_ == null) {
          filtersBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SerializationJobFilters, com.impinj.stp.StpApi.SerializationJobFilters.Builder, com.impinj.stp.StpApi.SerializationJobFiltersOrBuilder>(
                  filters_,
                  getParentForChildren(),
                  isClean());
          filters_ = null;
        }
        return filtersBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SerializationJob)
    }

    static {
      defaultInstance = new SerializationJob(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SerializationJob)
  }

  public interface PCWordOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes data = 1;
    /**
     *
     * 32 bit PC Word.
     */
    boolean hasData();
    /**
     *
     * 32 bit PC Word.
     */
    com.google.protobuf.ByteString getData();

    // optional bytes mask = 2;
    /**
     *
     * DEPRECATED
     */
    boolean hasMask();
    /**
     *
     * DEPRECATED
     */
    com.google.protobuf.ByteString getMask();
  }
  /**
   * Protobuf type {@code Impinj.STP.PCWord}
   *
   * EPC PC word, see Gen2 specification for packing of bits
   */
  public static final class PCWord extends
      com.google.protobuf.GeneratedMessage
      implements PCWordOrBuilder {
    // Use PCWord.newBuilder() to construct.
    private PCWord(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PCWord(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PCWord defaultInstance;
    public static PCWord getDefaultInstance() {
      return defaultInstance;
    }

    public PCWord getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PCWord(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              data_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              mask_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_PCWord_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_PCWord_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.PCWord.class, com.impinj.stp.StpApi.PCWord.Builder.class);
    }

    public static com.google.protobuf.Parser<PCWord> PARSER =
        new com.google.protobuf.AbstractParser<PCWord>() {
      public PCWord parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PCWord(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PCWord> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes data = 1;
    public static final int DATA_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString data_;
    /**
     *
     * 32 bit PC Word.
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * 32 bit PC Word.
     */
    public com.google.protobuf.ByteString getData() {
      return data_;
    }

    // optional bytes mask = 2;
    public static final int MASK_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString mask_;
    /**
     *
     * DEPRECATED
     */
    public boolean hasMask() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * DEPRECATED
     */
    public com.google.protobuf.ByteString getMask() {
      return mask_;
    }

    private void initFields() {
      data_ = com.google.protobuf.ByteString.EMPTY;
      mask_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, mask_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, mask_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.PCWord parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.PCWord parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.PCWord parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.PCWord parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.PCWord parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.PCWord parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.PCWord parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.PCWord parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.PCWord parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.PCWord parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.PCWord prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.PCWord}
     *
     * EPC PC word, see Gen2 specification for packing of bits
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.PCWordOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_PCWord_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_PCWord_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.PCWord.class, com.impinj.stp.StpApi.PCWord.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.PCWord.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        mask_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_PCWord_descriptor;
      }

      public com.impinj.stp.StpApi.PCWord getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.PCWord.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.PCWord build() {
        com.impinj.stp.StpApi.PCWord result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.PCWord buildPartial() {
        com.impinj.stp.StpApi.PCWord result = new com.impinj.stp.StpApi.PCWord(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.mask_ = mask_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.PCWord) {
          return mergeFrom((com.impinj.stp.StpApi.PCWord)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.PCWord other) {
        if (other == com.impinj.stp.StpApi.PCWord.getDefaultInstance()) return this;
        if (other.hasData()) {
          setData(other.getData());
        }
        if (other.hasMask()) {
          setMask(other.getMask());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.PCWord parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.PCWord) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes data = 1;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * 32 bit PC Word.
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * 32 bit PC Word.
       */
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      /**
       *
       * 32 bit PC Word.
       */
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        data_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * 32 bit PC Word.
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }

      // optional bytes mask = 2;
      private com.google.protobuf.ByteString mask_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * DEPRECATED
       */
      public boolean hasMask() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * DEPRECATED
       */
      public com.google.protobuf.ByteString getMask() {
        return mask_;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setMask(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        mask_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder clearMask() {
        bitField0_ = (bitField0_ & ~0x00000002);
        mask_ = getDefaultInstance().getMask();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.PCWord)
    }

    static {
      defaultInstance = new PCWord(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.PCWord)
  }

  public interface EPCMemoryOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes data = 1;
    /**
     */
    boolean hasData();
    /**
     */
    com.google.protobuf.ByteString getData();

    // optional bytes mask = 2;
    /**
     *
     * Bit mask permitting read-modify-write of the existing EPC
     * data.  For each bit use a '1' to update/write new EPC bit
     * and a '0' to keep the  existing EPC bit. The default is to
     * update the entire EPC (96 bits).
     */
    boolean hasMask();
    /**
     *
     * Bit mask permitting read-modify-write of the existing EPC
     * data.  For each bit use a '1' to update/write new EPC bit
     * and a '0' to keep the  existing EPC bit. The default is to
     * update the entire EPC (96 bits).
     */
    com.google.protobuf.ByteString getMask();

    // optional .Impinj.STP.Serialization serialization = 3;
    /**
     */
    boolean hasSerialization();
    /**
     */
    com.impinj.stp.StpApi.Serialization getSerialization();
    /**
     */
    com.impinj.stp.StpApi.SerializationOrBuilder getSerializationOrBuilder();

    // optional .Impinj.STP.PCWord pc_word = 4;
    /**
     *
     * Defines the PC bits (hence the inventoried EPC length).
     */
    boolean hasPcWord();
    /**
     *
     * Defines the PC bits (hence the inventoried EPC length).
     */
    com.impinj.stp.StpApi.PCWord getPcWord();
    /**
     *
     * Defines the PC bits (hence the inventoried EPC length).
     */
    com.impinj.stp.StpApi.PCWordOrBuilder getPcWordOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.EPCMemory}
   *
   * Describes the EPC memory of a tag.
   */
  public static final class EPCMemory extends
      com.google.protobuf.GeneratedMessage
      implements EPCMemoryOrBuilder {
    // Use EPCMemory.newBuilder() to construct.
    private EPCMemory(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EPCMemory(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EPCMemory defaultInstance;
    public static EPCMemory getDefaultInstance() {
      return defaultInstance;
    }

    public EPCMemory getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EPCMemory(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              data_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              mask_ = input.readBytes();
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.Serialization.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = serialization_.toBuilder();
              }
              serialization_ = input.readMessage(com.impinj.stp.StpApi.Serialization.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(serialization_);
                serialization_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.impinj.stp.StpApi.PCWord.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = pcWord_.toBuilder();
              }
              pcWord_ = input.readMessage(com.impinj.stp.StpApi.PCWord.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(pcWord_);
                pcWord_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_EPCMemory_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_EPCMemory_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.EPCMemory.class, com.impinj.stp.StpApi.EPCMemory.Builder.class);
    }

    public static com.google.protobuf.Parser<EPCMemory> PARSER =
        new com.google.protobuf.AbstractParser<EPCMemory>() {
      public EPCMemory parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EPCMemory(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EPCMemory> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes data = 1;
    public static final int DATA_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString data_;
    /**
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.google.protobuf.ByteString getData() {
      return data_;
    }

    // optional bytes mask = 2;
    public static final int MASK_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString mask_;
    /**
     *
     * Bit mask permitting read-modify-write of the existing EPC
     * data.  For each bit use a '1' to update/write new EPC bit
     * and a '0' to keep the  existing EPC bit. The default is to
     * update the entire EPC (96 bits).
     */
    public boolean hasMask() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Bit mask permitting read-modify-write of the existing EPC
     * data.  For each bit use a '1' to update/write new EPC bit
     * and a '0' to keep the  existing EPC bit. The default is to
     * update the entire EPC (96 bits).
     */
    public com.google.protobuf.ByteString getMask() {
      return mask_;
    }

    // optional .Impinj.STP.Serialization serialization = 3;
    public static final int SERIALIZATION_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.Serialization serialization_;
    /**
     */
    public boolean hasSerialization() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.Serialization getSerialization() {
      return serialization_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SerializationOrBuilder getSerializationOrBuilder() {
      return serialization_;
    }

    // optional .Impinj.STP.PCWord pc_word = 4;
    public static final int PC_WORD_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.PCWord pcWord_;
    /**
     *
     * Defines the PC bits (hence the inventoried EPC length).
     */
    public boolean hasPcWord() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Defines the PC bits (hence the inventoried EPC length).
     */
    public com.impinj.stp.StpApi.PCWord getPcWord() {
      return pcWord_;
    }
    /**
     *
     * Defines the PC bits (hence the inventoried EPC length).
     */
    public com.impinj.stp.StpApi.PCWordOrBuilder getPcWordOrBuilder() {
      return pcWord_;
    }

    private void initFields() {
      data_ = com.google.protobuf.ByteString.EMPTY;
      mask_ = com.google.protobuf.ByteString.EMPTY;
      serialization_ = com.impinj.stp.StpApi.Serialization.getDefaultInstance();
      pcWord_ = com.impinj.stp.StpApi.PCWord.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasSerialization()) {
        if (!getSerialization().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, mask_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, serialization_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, pcWord_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, mask_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, serialization_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, pcWord_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.EPCMemory parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.EPCMemory parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.EPCMemory prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.EPCMemory}
     *
     * Describes the EPC memory of a tag.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.EPCMemoryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EPCMemory_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EPCMemory_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.EPCMemory.class, com.impinj.stp.StpApi.EPCMemory.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.EPCMemory.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getSerializationFieldBuilder();
          getPcWordFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        mask_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (serializationBuilder_ == null) {
          serialization_ = com.impinj.stp.StpApi.Serialization.getDefaultInstance();
        } else {
          serializationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (pcWordBuilder_ == null) {
          pcWord_ = com.impinj.stp.StpApi.PCWord.getDefaultInstance();
        } else {
          pcWordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EPCMemory_descriptor;
      }

      public com.impinj.stp.StpApi.EPCMemory getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.EPCMemory build() {
        com.impinj.stp.StpApi.EPCMemory result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.EPCMemory buildPartial() {
        com.impinj.stp.StpApi.EPCMemory result = new com.impinj.stp.StpApi.EPCMemory(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.mask_ = mask_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (serializationBuilder_ == null) {
          result.serialization_ = serialization_;
        } else {
          result.serialization_ = serializationBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (pcWordBuilder_ == null) {
          result.pcWord_ = pcWord_;
        } else {
          result.pcWord_ = pcWordBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.EPCMemory) {
          return mergeFrom((com.impinj.stp.StpApi.EPCMemory)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.EPCMemory other) {
        if (other == com.impinj.stp.StpApi.EPCMemory.getDefaultInstance()) return this;
        if (other.hasData()) {
          setData(other.getData());
        }
        if (other.hasMask()) {
          setMask(other.getMask());
        }
        if (other.hasSerialization()) {
          mergeSerialization(other.getSerialization());
        }
        if (other.hasPcWord()) {
          mergePcWord(other.getPcWord());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasSerialization()) {
          if (!getSerialization().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.EPCMemory parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.EPCMemory) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes data = 1;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      /**
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      /**
       */
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        data_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }

      // optional bytes mask = 2;
      private com.google.protobuf.ByteString mask_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * Bit mask permitting read-modify-write of the existing EPC
       * data.  For each bit use a '1' to update/write new EPC bit
       * and a '0' to keep the  existing EPC bit. The default is to
       * update the entire EPC (96 bits).
       */
      public boolean hasMask() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Bit mask permitting read-modify-write of the existing EPC
       * data.  For each bit use a '1' to update/write new EPC bit
       * and a '0' to keep the  existing EPC bit. The default is to
       * update the entire EPC (96 bits).
       */
      public com.google.protobuf.ByteString getMask() {
        return mask_;
      }
      /**
       *
       * Bit mask permitting read-modify-write of the existing EPC
       * data.  For each bit use a '1' to update/write new EPC bit
       * and a '0' to keep the  existing EPC bit. The default is to
       * update the entire EPC (96 bits).
       */
      public Builder setMask(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        mask_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Bit mask permitting read-modify-write of the existing EPC
       * data.  For each bit use a '1' to update/write new EPC bit
       * and a '0' to keep the  existing EPC bit. The default is to
       * update the entire EPC (96 bits).
       */
      public Builder clearMask() {
        bitField0_ = (bitField0_ & ~0x00000002);
        mask_ = getDefaultInstance().getMask();
        onChanged();
        return this;
      }

      // optional .Impinj.STP.Serialization serialization = 3;
      private com.impinj.stp.StpApi.Serialization serialization_ = com.impinj.stp.StpApi.Serialization.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Serialization, com.impinj.stp.StpApi.Serialization.Builder, com.impinj.stp.StpApi.SerializationOrBuilder> serializationBuilder_;
      /**
       */
      public boolean hasSerialization() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.Serialization getSerialization() {
        if (serializationBuilder_ == null) {
          return serialization_;
        } else {
          return serializationBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSerialization(com.impinj.stp.StpApi.Serialization value) {
        if (serializationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          serialization_ = value;
          onChanged();
        } else {
          serializationBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder setSerialization(
          com.impinj.stp.StpApi.Serialization.Builder builderForValue) {
        if (serializationBuilder_ == null) {
          serialization_ = builderForValue.build();
          onChanged();
        } else {
          serializationBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder mergeSerialization(com.impinj.stp.StpApi.Serialization value) {
        if (serializationBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              serialization_ != com.impinj.stp.StpApi.Serialization.getDefaultInstance()) {
            serialization_ =
              com.impinj.stp.StpApi.Serialization.newBuilder(serialization_).mergeFrom(value).buildPartial();
          } else {
            serialization_ = value;
          }
          onChanged();
        } else {
          serializationBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder clearSerialization() {
        if (serializationBuilder_ == null) {
          serialization_ = com.impinj.stp.StpApi.Serialization.getDefaultInstance();
          onChanged();
        } else {
          serializationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Serialization.Builder getSerializationBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getSerializationFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationOrBuilder getSerializationOrBuilder() {
        if (serializationBuilder_ != null) {
          return serializationBuilder_.getMessageOrBuilder();
        } else {
          return serialization_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Serialization, com.impinj.stp.StpApi.Serialization.Builder, com.impinj.stp.StpApi.SerializationOrBuilder> 
          getSerializationFieldBuilder() {
        if (serializationBuilder_ == null) {
          serializationBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Serialization, com.impinj.stp.StpApi.Serialization.Builder, com.impinj.stp.StpApi.SerializationOrBuilder>(
                  serialization_,
                  getParentForChildren(),
                  isClean());
          serialization_ = null;
        }
        return serializationBuilder_;
      }

      // optional .Impinj.STP.PCWord pc_word = 4;
      private com.impinj.stp.StpApi.PCWord pcWord_ = com.impinj.stp.StpApi.PCWord.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.PCWord, com.impinj.stp.StpApi.PCWord.Builder, com.impinj.stp.StpApi.PCWordOrBuilder> pcWordBuilder_;
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public boolean hasPcWord() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public com.impinj.stp.StpApi.PCWord getPcWord() {
        if (pcWordBuilder_ == null) {
          return pcWord_;
        } else {
          return pcWordBuilder_.getMessage();
        }
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public Builder setPcWord(com.impinj.stp.StpApi.PCWord value) {
        if (pcWordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          pcWord_ = value;
          onChanged();
        } else {
          pcWordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public Builder setPcWord(
          com.impinj.stp.StpApi.PCWord.Builder builderForValue) {
        if (pcWordBuilder_ == null) {
          pcWord_ = builderForValue.build();
          onChanged();
        } else {
          pcWordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public Builder mergePcWord(com.impinj.stp.StpApi.PCWord value) {
        if (pcWordBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              pcWord_ != com.impinj.stp.StpApi.PCWord.getDefaultInstance()) {
            pcWord_ =
              com.impinj.stp.StpApi.PCWord.newBuilder(pcWord_).mergeFrom(value).buildPartial();
          } else {
            pcWord_ = value;
          }
          onChanged();
        } else {
          pcWordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public Builder clearPcWord() {
        if (pcWordBuilder_ == null) {
          pcWord_ = com.impinj.stp.StpApi.PCWord.getDefaultInstance();
          onChanged();
        } else {
          pcWordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public com.impinj.stp.StpApi.PCWord.Builder getPcWordBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getPcWordFieldBuilder().getBuilder();
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      public com.impinj.stp.StpApi.PCWordOrBuilder getPcWordOrBuilder() {
        if (pcWordBuilder_ != null) {
          return pcWordBuilder_.getMessageOrBuilder();
        } else {
          return pcWord_;
        }
      }
      /**
       *
       * Defines the PC bits (hence the inventoried EPC length).
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.PCWord, com.impinj.stp.StpApi.PCWord.Builder, com.impinj.stp.StpApi.PCWordOrBuilder> 
          getPcWordFieldBuilder() {
        if (pcWordBuilder_ == null) {
          pcWordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.PCWord, com.impinj.stp.StpApi.PCWord.Builder, com.impinj.stp.StpApi.PCWordOrBuilder>(
                  pcWord_,
                  getParentForChildren(),
                  isClean());
          pcWord_ = null;
        }
        return pcWordBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.EPCMemory)
    }

    static {
      defaultInstance = new EPCMemory(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.EPCMemory)
  }

  public interface TIDMemoryOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required bytes data = 1;
    /**
     *
     * The data to write to a tag. The length of this binary string
     * must be a multiple of 16-bits
     */
    boolean hasData();
    /**
     *
     * The data to write to a tag. The length of this binary string
     * must be a multiple of 16-bits
     */
    com.google.protobuf.ByteString getData();

    // optional uint32 word_offset = 3 [default = 0];
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset
     */
    boolean hasWordOffset();
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset
     */
    int getWordOffset();
  }
  /**
   * Protobuf type {@code Impinj.STP.TIDMemory}
   *
   * Describes the TID memory of a tag.
   */
  public static final class TIDMemory extends
      com.google.protobuf.GeneratedMessage
      implements TIDMemoryOrBuilder {
    // Use TIDMemory.newBuilder() to construct.
    private TIDMemory(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TIDMemory(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TIDMemory defaultInstance;
    public static TIDMemory getDefaultInstance() {
      return defaultInstance;
    }

    public TIDMemory getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TIDMemory(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              data_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              wordOffset_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDMemory_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDMemory_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TIDMemory.class, com.impinj.stp.StpApi.TIDMemory.Builder.class);
    }

    public static com.google.protobuf.Parser<TIDMemory> PARSER =
        new com.google.protobuf.AbstractParser<TIDMemory>() {
      public TIDMemory parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TIDMemory(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TIDMemory> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required bytes data = 1;
    public static final int DATA_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString data_;
    /**
     *
     * The data to write to a tag. The length of this binary string
     * must be a multiple of 16-bits
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * The data to write to a tag. The length of this binary string
     * must be a multiple of 16-bits
     */
    public com.google.protobuf.ByteString getData() {
      return data_;
    }

    // optional uint32 word_offset = 3 [default = 0];
    public static final int WORD_OFFSET_FIELD_NUMBER = 3;
    private int wordOffset_;
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset
     */
    public boolean hasWordOffset() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset
     */
    public int getWordOffset() {
      return wordOffset_;
    }

    private void initFields() {
      data_ = com.google.protobuf.ByteString.EMPTY;
      wordOffset_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasData()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(3, wordOffset_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, wordOffset_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TIDMemory parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDMemory parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TIDMemory prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TIDMemory}
     *
     * Describes the TID memory of a tag.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TIDMemoryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDMemory_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDMemory_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TIDMemory.class, com.impinj.stp.StpApi.TIDMemory.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TIDMemory.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        wordOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDMemory_descriptor;
      }

      public com.impinj.stp.StpApi.TIDMemory getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TIDMemory build() {
        com.impinj.stp.StpApi.TIDMemory result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TIDMemory buildPartial() {
        com.impinj.stp.StpApi.TIDMemory result = new com.impinj.stp.StpApi.TIDMemory(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.wordOffset_ = wordOffset_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TIDMemory) {
          return mergeFrom((com.impinj.stp.StpApi.TIDMemory)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TIDMemory other) {
        if (other == com.impinj.stp.StpApi.TIDMemory.getDefaultInstance()) return this;
        if (other.hasData()) {
          setData(other.getData());
        }
        if (other.hasWordOffset()) {
          setWordOffset(other.getWordOffset());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasData()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TIDMemory parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TIDMemory) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required bytes data = 1;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * The data to write to a tag. The length of this binary string
       * must be a multiple of 16-bits
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * The data to write to a tag. The length of this binary string
       * must be a multiple of 16-bits
       */
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      /**
       *
       * The data to write to a tag. The length of this binary string
       * must be a multiple of 16-bits
       */
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        data_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The data to write to a tag. The length of this binary string
       * must be a multiple of 16-bits
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }

      // optional uint32 word_offset = 3 [default = 0];
      private int wordOffset_ ;
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset
       */
      public boolean hasWordOffset() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset
       */
      public int getWordOffset() {
        return wordOffset_;
      }
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset
       */
      public Builder setWordOffset(int value) {
        bitField0_ |= 0x00000002;
        wordOffset_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset
       */
      public Builder clearWordOffset() {
        bitField0_ = (bitField0_ & ~0x00000002);
        wordOffset_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TIDMemory)
    }

    static {
      defaultInstance = new TIDMemory(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TIDMemory)
  }

  public interface SerializationOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required uint32 serialization_bits = 1;
    /**
     *
     * Length of serial number to generate e.g. 38-bits
     * 
     *  2-5 DEPRECATED
     */
    boolean hasSerializationBits();
    /**
     *
     * Length of serial number to generate e.g. 38-bits
     * 
     *  2-5 DEPRECATED
     */
    int getSerializationBits();

    // optional .Impinj.STP.MonzaSelfSerialization monza_self_serialization = 6;
    /**
     *
     * Monza Self-Serialization between 34-bits and 96-bits in
     * length.
     */
    boolean hasMonzaSelfSerialization();
    /**
     *
     * Monza Self-Serialization between 34-bits and 96-bits in
     * length.
     */
    com.impinj.stp.StpApi.MonzaSelfSerialization getMonzaSelfSerialization();
    /**
     *
     * Monza Self-Serialization between 34-bits and 96-bits in
     * length.
     */
    com.impinj.stp.StpApi.MonzaSelfSerializationOrBuilder getMonzaSelfSerializationOrBuilder();

    // optional .Impinj.STP.SerialNumberRange serial_number_range = 7;
    /**
     *
     * Serial Number Range can be up to 496-bits or full length of
     * EPC (pad left with zeros).
     */
    boolean hasSerialNumberRange();
    /**
     *
     * Serial Number Range can be up to 496-bits or full length of
     * EPC (pad left with zeros).
     */
    com.impinj.stp.StpApi.SerialNumberRange getSerialNumberRange();
    /**
     *
     * Serial Number Range can be up to 496-bits or full length of
     * EPC (pad left with zeros).
     */
    com.impinj.stp.StpApi.SerialNumberRangeOrBuilder getSerialNumberRangeOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.Serialization}
   *
   * How serial numbers are determined.
   */
  public static final class Serialization extends
      com.google.protobuf.GeneratedMessage
      implements SerializationOrBuilder {
    // Use Serialization.newBuilder() to construct.
    private Serialization(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Serialization(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Serialization defaultInstance;
    public static Serialization getDefaultInstance() {
      return defaultInstance;
    }

    public Serialization getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Serialization(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              serializationBits_ = input.readUInt32();
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.MonzaSelfSerialization.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = monzaSelfSerialization_.toBuilder();
              }
              monzaSelfSerialization_ = input.readMessage(com.impinj.stp.StpApi.MonzaSelfSerialization.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaSelfSerialization_);
                monzaSelfSerialization_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 58: {
              com.impinj.stp.StpApi.SerialNumberRange.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = serialNumberRange_.toBuilder();
              }
              serialNumberRange_ = input.readMessage(com.impinj.stp.StpApi.SerialNumberRange.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(serialNumberRange_);
                serialNumberRange_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Serialization_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Serialization_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Serialization.class, com.impinj.stp.StpApi.Serialization.Builder.class);
    }

    public static com.google.protobuf.Parser<Serialization> PARSER =
        new com.google.protobuf.AbstractParser<Serialization>() {
      public Serialization parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Serialization(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Serialization> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required uint32 serialization_bits = 1;
    public static final int SERIALIZATION_BITS_FIELD_NUMBER = 1;
    private int serializationBits_;
    /**
     *
     * Length of serial number to generate e.g. 38-bits
     * 
     *  2-5 DEPRECATED
     */
    public boolean hasSerializationBits() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Length of serial number to generate e.g. 38-bits
     * 
     *  2-5 DEPRECATED
     */
    public int getSerializationBits() {
      return serializationBits_;
    }

    // optional .Impinj.STP.MonzaSelfSerialization monza_self_serialization = 6;
    public static final int MONZA_SELF_SERIALIZATION_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.MonzaSelfSerialization monzaSelfSerialization_;
    /**
     *
     * Monza Self-Serialization between 34-bits and 96-bits in
     * length.
     */
    public boolean hasMonzaSelfSerialization() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Monza Self-Serialization between 34-bits and 96-bits in
     * length.
     */
    public com.impinj.stp.StpApi.MonzaSelfSerialization getMonzaSelfSerialization() {
      return monzaSelfSerialization_;
    }
    /**
     *
     * Monza Self-Serialization between 34-bits and 96-bits in
     * length.
     */
    public com.impinj.stp.StpApi.MonzaSelfSerializationOrBuilder getMonzaSelfSerializationOrBuilder() {
      return monzaSelfSerialization_;
    }

    // optional .Impinj.STP.SerialNumberRange serial_number_range = 7;
    public static final int SERIAL_NUMBER_RANGE_FIELD_NUMBER = 7;
    private com.impinj.stp.StpApi.SerialNumberRange serialNumberRange_;
    /**
     *
     * Serial Number Range can be up to 496-bits or full length of
     * EPC (pad left with zeros).
     */
    public boolean hasSerialNumberRange() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Serial Number Range can be up to 496-bits or full length of
     * EPC (pad left with zeros).
     */
    public com.impinj.stp.StpApi.SerialNumberRange getSerialNumberRange() {
      return serialNumberRange_;
    }
    /**
     *
     * Serial Number Range can be up to 496-bits or full length of
     * EPC (pad left with zeros).
     */
    public com.impinj.stp.StpApi.SerialNumberRangeOrBuilder getSerialNumberRangeOrBuilder() {
      return serialNumberRange_;
    }

    private void initFields() {
      serializationBits_ = 0;
      monzaSelfSerialization_ = com.impinj.stp.StpApi.MonzaSelfSerialization.getDefaultInstance();
      serialNumberRange_ = com.impinj.stp.StpApi.SerialNumberRange.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasSerializationBits()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, serializationBits_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(6, monzaSelfSerialization_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(7, serialNumberRange_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, serializationBits_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, monzaSelfSerialization_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, serialNumberRange_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Serialization parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Serialization parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Serialization parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Serialization parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Serialization parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Serialization parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Serialization parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Serialization parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Serialization parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Serialization parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Serialization prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Serialization}
     *
     * How serial numbers are determined.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SerializationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Serialization_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Serialization_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Serialization.class, com.impinj.stp.StpApi.Serialization.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Serialization.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getMonzaSelfSerializationFieldBuilder();
          getSerialNumberRangeFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        serializationBits_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (monzaSelfSerializationBuilder_ == null) {
          monzaSelfSerialization_ = com.impinj.stp.StpApi.MonzaSelfSerialization.getDefaultInstance();
        } else {
          monzaSelfSerializationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (serialNumberRangeBuilder_ == null) {
          serialNumberRange_ = com.impinj.stp.StpApi.SerialNumberRange.getDefaultInstance();
        } else {
          serialNumberRangeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Serialization_descriptor;
      }

      public com.impinj.stp.StpApi.Serialization getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Serialization.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Serialization build() {
        com.impinj.stp.StpApi.Serialization result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Serialization buildPartial() {
        com.impinj.stp.StpApi.Serialization result = new com.impinj.stp.StpApi.Serialization(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.serializationBits_ = serializationBits_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (monzaSelfSerializationBuilder_ == null) {
          result.monzaSelfSerialization_ = monzaSelfSerialization_;
        } else {
          result.monzaSelfSerialization_ = monzaSelfSerializationBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (serialNumberRangeBuilder_ == null) {
          result.serialNumberRange_ = serialNumberRange_;
        } else {
          result.serialNumberRange_ = serialNumberRangeBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Serialization) {
          return mergeFrom((com.impinj.stp.StpApi.Serialization)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Serialization other) {
        if (other == com.impinj.stp.StpApi.Serialization.getDefaultInstance()) return this;
        if (other.hasSerializationBits()) {
          setSerializationBits(other.getSerializationBits());
        }
        if (other.hasMonzaSelfSerialization()) {
          mergeMonzaSelfSerialization(other.getMonzaSelfSerialization());
        }
        if (other.hasSerialNumberRange()) {
          mergeSerialNumberRange(other.getSerialNumberRange());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasSerializationBits()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Serialization parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Serialization) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required uint32 serialization_bits = 1;
      private int serializationBits_ ;
      /**
       *
       * Length of serial number to generate e.g. 38-bits
       * 
       *  2-5 DEPRECATED
       */
      public boolean hasSerializationBits() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Length of serial number to generate e.g. 38-bits
       * 
       *  2-5 DEPRECATED
       */
      public int getSerializationBits() {
        return serializationBits_;
      }
      /**
       *
       * Length of serial number to generate e.g. 38-bits
       * 
       *  2-5 DEPRECATED
       */
      public Builder setSerializationBits(int value) {
        bitField0_ |= 0x00000001;
        serializationBits_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Length of serial number to generate e.g. 38-bits
       * 
       *  2-5 DEPRECATED
       */
      public Builder clearSerializationBits() {
        bitField0_ = (bitField0_ & ~0x00000001);
        serializationBits_ = 0;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.MonzaSelfSerialization monza_self_serialization = 6;
      private com.impinj.stp.StpApi.MonzaSelfSerialization monzaSelfSerialization_ = com.impinj.stp.StpApi.MonzaSelfSerialization.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaSelfSerialization, com.impinj.stp.StpApi.MonzaSelfSerialization.Builder, com.impinj.stp.StpApi.MonzaSelfSerializationOrBuilder> monzaSelfSerializationBuilder_;
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public boolean hasMonzaSelfSerialization() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public com.impinj.stp.StpApi.MonzaSelfSerialization getMonzaSelfSerialization() {
        if (monzaSelfSerializationBuilder_ == null) {
          return monzaSelfSerialization_;
        } else {
          return monzaSelfSerializationBuilder_.getMessage();
        }
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public Builder setMonzaSelfSerialization(com.impinj.stp.StpApi.MonzaSelfSerialization value) {
        if (monzaSelfSerializationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaSelfSerialization_ = value;
          onChanged();
        } else {
          monzaSelfSerializationBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public Builder setMonzaSelfSerialization(
          com.impinj.stp.StpApi.MonzaSelfSerialization.Builder builderForValue) {
        if (monzaSelfSerializationBuilder_ == null) {
          monzaSelfSerialization_ = builderForValue.build();
          onChanged();
        } else {
          monzaSelfSerializationBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public Builder mergeMonzaSelfSerialization(com.impinj.stp.StpApi.MonzaSelfSerialization value) {
        if (monzaSelfSerializationBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              monzaSelfSerialization_ != com.impinj.stp.StpApi.MonzaSelfSerialization.getDefaultInstance()) {
            monzaSelfSerialization_ =
              com.impinj.stp.StpApi.MonzaSelfSerialization.newBuilder(monzaSelfSerialization_).mergeFrom(value).buildPartial();
          } else {
            monzaSelfSerialization_ = value;
          }
          onChanged();
        } else {
          monzaSelfSerializationBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public Builder clearMonzaSelfSerialization() {
        if (monzaSelfSerializationBuilder_ == null) {
          monzaSelfSerialization_ = com.impinj.stp.StpApi.MonzaSelfSerialization.getDefaultInstance();
          onChanged();
        } else {
          monzaSelfSerializationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public com.impinj.stp.StpApi.MonzaSelfSerialization.Builder getMonzaSelfSerializationBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getMonzaSelfSerializationFieldBuilder().getBuilder();
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      public com.impinj.stp.StpApi.MonzaSelfSerializationOrBuilder getMonzaSelfSerializationOrBuilder() {
        if (monzaSelfSerializationBuilder_ != null) {
          return monzaSelfSerializationBuilder_.getMessageOrBuilder();
        } else {
          return monzaSelfSerialization_;
        }
      }
      /**
       *
       * Monza Self-Serialization between 34-bits and 96-bits in
       * length.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaSelfSerialization, com.impinj.stp.StpApi.MonzaSelfSerialization.Builder, com.impinj.stp.StpApi.MonzaSelfSerializationOrBuilder> 
          getMonzaSelfSerializationFieldBuilder() {
        if (monzaSelfSerializationBuilder_ == null) {
          monzaSelfSerializationBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaSelfSerialization, com.impinj.stp.StpApi.MonzaSelfSerialization.Builder, com.impinj.stp.StpApi.MonzaSelfSerializationOrBuilder>(
                  monzaSelfSerialization_,
                  getParentForChildren(),
                  isClean());
          monzaSelfSerialization_ = null;
        }
        return monzaSelfSerializationBuilder_;
      }

      // optional .Impinj.STP.SerialNumberRange serial_number_range = 7;
      private com.impinj.stp.StpApi.SerialNumberRange serialNumberRange_ = com.impinj.stp.StpApi.SerialNumberRange.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SerialNumberRange, com.impinj.stp.StpApi.SerialNumberRange.Builder, com.impinj.stp.StpApi.SerialNumberRangeOrBuilder> serialNumberRangeBuilder_;
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public boolean hasSerialNumberRange() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public com.impinj.stp.StpApi.SerialNumberRange getSerialNumberRange() {
        if (serialNumberRangeBuilder_ == null) {
          return serialNumberRange_;
        } else {
          return serialNumberRangeBuilder_.getMessage();
        }
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public Builder setSerialNumberRange(com.impinj.stp.StpApi.SerialNumberRange value) {
        if (serialNumberRangeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          serialNumberRange_ = value;
          onChanged();
        } else {
          serialNumberRangeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public Builder setSerialNumberRange(
          com.impinj.stp.StpApi.SerialNumberRange.Builder builderForValue) {
        if (serialNumberRangeBuilder_ == null) {
          serialNumberRange_ = builderForValue.build();
          onChanged();
        } else {
          serialNumberRangeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public Builder mergeSerialNumberRange(com.impinj.stp.StpApi.SerialNumberRange value) {
        if (serialNumberRangeBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              serialNumberRange_ != com.impinj.stp.StpApi.SerialNumberRange.getDefaultInstance()) {
            serialNumberRange_ =
              com.impinj.stp.StpApi.SerialNumberRange.newBuilder(serialNumberRange_).mergeFrom(value).buildPartial();
          } else {
            serialNumberRange_ = value;
          }
          onChanged();
        } else {
          serialNumberRangeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public Builder clearSerialNumberRange() {
        if (serialNumberRangeBuilder_ == null) {
          serialNumberRange_ = com.impinj.stp.StpApi.SerialNumberRange.getDefaultInstance();
          onChanged();
        } else {
          serialNumberRangeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public com.impinj.stp.StpApi.SerialNumberRange.Builder getSerialNumberRangeBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getSerialNumberRangeFieldBuilder().getBuilder();
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      public com.impinj.stp.StpApi.SerialNumberRangeOrBuilder getSerialNumberRangeOrBuilder() {
        if (serialNumberRangeBuilder_ != null) {
          return serialNumberRangeBuilder_.getMessageOrBuilder();
        } else {
          return serialNumberRange_;
        }
      }
      /**
       *
       * Serial Number Range can be up to 496-bits or full length of
       * EPC (pad left with zeros).
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SerialNumberRange, com.impinj.stp.StpApi.SerialNumberRange.Builder, com.impinj.stp.StpApi.SerialNumberRangeOrBuilder> 
          getSerialNumberRangeFieldBuilder() {
        if (serialNumberRangeBuilder_ == null) {
          serialNumberRangeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SerialNumberRange, com.impinj.stp.StpApi.SerialNumberRange.Builder, com.impinj.stp.StpApi.SerialNumberRangeOrBuilder>(
                  serialNumberRange_,
                  getParentForChildren(),
                  isClean());
          serialNumberRange_ = null;
        }
        return serialNumberRangeBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Serialization)
    }

    static {
      defaultInstance = new Serialization(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Serialization)
  }

  public interface MonzaSelfSerializationOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string serialization_prefix = 1;
    /**
     *
     * Up to a 4-bit prefix, always left most MSB of 38-bit serial
     * number, e.g. "10".
     */
    boolean hasSerializationPrefix();
    /**
     *
     * Up to a 4-bit prefix, always left most MSB of 38-bit serial
     * number, e.g. "10".
     */
    java.lang.String getSerializationPrefix();
    /**
     *
     * Up to a 4-bit prefix, always left most MSB of 38-bit serial
     * number, e.g. "10".
     */
    com.google.protobuf.ByteString
        getSerializationPrefixBytes();
  }
  /**
   * Protobuf type {@code Impinj.STP.MonzaSelfSerialization}
   *
   * Monza Self-Serialization between 34-bits and 96-bits in
   * length.
   */
  public static final class MonzaSelfSerialization extends
      com.google.protobuf.GeneratedMessage
      implements MonzaSelfSerializationOrBuilder {
    // Use MonzaSelfSerialization.newBuilder() to construct.
    private MonzaSelfSerialization(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MonzaSelfSerialization(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MonzaSelfSerialization defaultInstance;
    public static MonzaSelfSerialization getDefaultInstance() {
      return defaultInstance;
    }

    public MonzaSelfSerialization getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MonzaSelfSerialization(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              serializationPrefix_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaSelfSerialization_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaSelfSerialization_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.MonzaSelfSerialization.class, com.impinj.stp.StpApi.MonzaSelfSerialization.Builder.class);
    }

    public static com.google.protobuf.Parser<MonzaSelfSerialization> PARSER =
        new com.google.protobuf.AbstractParser<MonzaSelfSerialization>() {
      public MonzaSelfSerialization parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MonzaSelfSerialization(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MonzaSelfSerialization> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string serialization_prefix = 1;
    public static final int SERIALIZATION_PREFIX_FIELD_NUMBER = 1;
    private java.lang.Object serializationPrefix_;
    /**
     *
     * Up to a 4-bit prefix, always left most MSB of 38-bit serial
     * number, e.g. "10".
     */
    public boolean hasSerializationPrefix() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Up to a 4-bit prefix, always left most MSB of 38-bit serial
     * number, e.g. "10".
     */
    public java.lang.String getSerializationPrefix() {
      java.lang.Object ref = serializationPrefix_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          serializationPrefix_ = s;
        }
        return s;
      }
    }
    /**
     *
     * Up to a 4-bit prefix, always left most MSB of 38-bit serial
     * number, e.g. "10".
     */
    public com.google.protobuf.ByteString
        getSerializationPrefixBytes() {
      java.lang.Object ref = serializationPrefix_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        serializationPrefix_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      serializationPrefix_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getSerializationPrefixBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getSerializationPrefixBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaSelfSerialization parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.MonzaSelfSerialization prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.MonzaSelfSerialization}
     *
     * Monza Self-Serialization between 34-bits and 96-bits in
     * length.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.MonzaSelfSerializationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaSelfSerialization_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaSelfSerialization_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.MonzaSelfSerialization.class, com.impinj.stp.StpApi.MonzaSelfSerialization.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.MonzaSelfSerialization.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        serializationPrefix_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaSelfSerialization_descriptor;
      }

      public com.impinj.stp.StpApi.MonzaSelfSerialization getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.MonzaSelfSerialization.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.MonzaSelfSerialization build() {
        com.impinj.stp.StpApi.MonzaSelfSerialization result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.MonzaSelfSerialization buildPartial() {
        com.impinj.stp.StpApi.MonzaSelfSerialization result = new com.impinj.stp.StpApi.MonzaSelfSerialization(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.serializationPrefix_ = serializationPrefix_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.MonzaSelfSerialization) {
          return mergeFrom((com.impinj.stp.StpApi.MonzaSelfSerialization)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.MonzaSelfSerialization other) {
        if (other == com.impinj.stp.StpApi.MonzaSelfSerialization.getDefaultInstance()) return this;
        if (other.hasSerializationPrefix()) {
          bitField0_ |= 0x00000001;
          serializationPrefix_ = other.serializationPrefix_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.MonzaSelfSerialization parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.MonzaSelfSerialization) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string serialization_prefix = 1;
      private java.lang.Object serializationPrefix_ = "";
      /**
       *
       * Up to a 4-bit prefix, always left most MSB of 38-bit serial
       * number, e.g. "10".
       */
      public boolean hasSerializationPrefix() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Up to a 4-bit prefix, always left most MSB of 38-bit serial
       * number, e.g. "10".
       */
      public java.lang.String getSerializationPrefix() {
        java.lang.Object ref = serializationPrefix_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          serializationPrefix_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       *
       * Up to a 4-bit prefix, always left most MSB of 38-bit serial
       * number, e.g. "10".
       */
      public com.google.protobuf.ByteString
          getSerializationPrefixBytes() {
        java.lang.Object ref = serializationPrefix_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          serializationPrefix_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       *
       * Up to a 4-bit prefix, always left most MSB of 38-bit serial
       * number, e.g. "10".
       */
      public Builder setSerializationPrefix(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        serializationPrefix_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Up to a 4-bit prefix, always left most MSB of 38-bit serial
       * number, e.g. "10".
       */
      public Builder clearSerializationPrefix() {
        bitField0_ = (bitField0_ & ~0x00000001);
        serializationPrefix_ = getDefaultInstance().getSerializationPrefix();
        onChanged();
        return this;
      }
      /**
       *
       * Up to a 4-bit prefix, always left most MSB of 38-bit serial
       * number, e.g. "10".
       */
      public Builder setSerializationPrefixBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        serializationPrefix_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.MonzaSelfSerialization)
    }

    static {
      defaultInstance = new MonzaSelfSerialization(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.MonzaSelfSerialization)
  }

  public interface SerialNumberRangeOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint64 serial_number_range_start = 1;
    /**
     */
    boolean hasSerialNumberRangeStart();
    /**
     */
    long getSerialNumberRangeStart();

    // optional uint64 serial_number_range_end = 2;
    /**
     */
    boolean hasSerialNumberRangeEnd();
    /**
     */
    long getSerialNumberRangeEnd();

    // optional uint32 bit_offset = 3;
    /**
     */
    boolean hasBitOffset();
    /**
     */
    int getBitOffset();

    // optional .Impinj.STP.SerialNumberRangeFormat serial_number_range_format = 4;
    /**
     */
    boolean hasSerialNumberRangeFormat();
    /**
     */
    com.impinj.stp.StpApi.SerialNumberRangeFormat getSerialNumberRangeFormat();
  }
  /**
   * Protobuf type {@code Impinj.STP.SerialNumberRange}
   *
   * Serial number range can be up to 496-bits or full length of
   * EPC  (pad left with zeros)
   */
  public static final class SerialNumberRange extends
      com.google.protobuf.GeneratedMessage
      implements SerialNumberRangeOrBuilder {
    // Use SerialNumberRange.newBuilder() to construct.
    private SerialNumberRange(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SerialNumberRange(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SerialNumberRange defaultInstance;
    public static SerialNumberRange getDefaultInstance() {
      return defaultInstance;
    }

    public SerialNumberRange getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SerialNumberRange(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              serialNumberRangeStart_ = input.readUInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              serialNumberRangeEnd_ = input.readUInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              bitOffset_ = input.readUInt32();
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.SerialNumberRangeFormat value = com.impinj.stp.StpApi.SerialNumberRangeFormat.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                serialNumberRangeFormat_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerialNumberRange_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerialNumberRange_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SerialNumberRange.class, com.impinj.stp.StpApi.SerialNumberRange.Builder.class);
    }

    public static com.google.protobuf.Parser<SerialNumberRange> PARSER =
        new com.google.protobuf.AbstractParser<SerialNumberRange>() {
      public SerialNumberRange parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SerialNumberRange(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SerialNumberRange> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional uint64 serial_number_range_start = 1;
    public static final int SERIAL_NUMBER_RANGE_START_FIELD_NUMBER = 1;
    private long serialNumberRangeStart_;
    /**
     */
    public boolean hasSerialNumberRangeStart() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public long getSerialNumberRangeStart() {
      return serialNumberRangeStart_;
    }

    // optional uint64 serial_number_range_end = 2;
    public static final int SERIAL_NUMBER_RANGE_END_FIELD_NUMBER = 2;
    private long serialNumberRangeEnd_;
    /**
     */
    public boolean hasSerialNumberRangeEnd() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public long getSerialNumberRangeEnd() {
      return serialNumberRangeEnd_;
    }

    // optional uint32 bit_offset = 3;
    public static final int BIT_OFFSET_FIELD_NUMBER = 3;
    private int bitOffset_;
    /**
     */
    public boolean hasBitOffset() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public int getBitOffset() {
      return bitOffset_;
    }

    // optional .Impinj.STP.SerialNumberRangeFormat serial_number_range_format = 4;
    public static final int SERIAL_NUMBER_RANGE_FORMAT_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.SerialNumberRangeFormat serialNumberRangeFormat_;
    /**
     */
    public boolean hasSerialNumberRangeFormat() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.SerialNumberRangeFormat getSerialNumberRangeFormat() {
      return serialNumberRangeFormat_;
    }

    private void initFields() {
      serialNumberRangeStart_ = 0L;
      serialNumberRangeEnd_ = 0L;
      bitOffset_ = 0;
      serialNumberRangeFormat_ = com.impinj.stp.StpApi.SerialNumberRangeFormat.SERIAL_NUMBER_RANGE_FORMAT_HEX;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt64(1, serialNumberRangeStart_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(2, serialNumberRangeEnd_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(3, bitOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(4, serialNumberRangeFormat_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, serialNumberRangeStart_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, serialNumberRangeEnd_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, bitOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, serialNumberRangeFormat_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SerialNumberRange parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SerialNumberRange prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SerialNumberRange}
     *
     * Serial number range can be up to 496-bits or full length of
     * EPC  (pad left with zeros)
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SerialNumberRangeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerialNumberRange_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerialNumberRange_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SerialNumberRange.class, com.impinj.stp.StpApi.SerialNumberRange.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SerialNumberRange.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        serialNumberRangeStart_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        serialNumberRangeEnd_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        bitOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        serialNumberRangeFormat_ = com.impinj.stp.StpApi.SerialNumberRangeFormat.SERIAL_NUMBER_RANGE_FORMAT_HEX;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SerialNumberRange_descriptor;
      }

      public com.impinj.stp.StpApi.SerialNumberRange getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SerialNumberRange.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SerialNumberRange build() {
        com.impinj.stp.StpApi.SerialNumberRange result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SerialNumberRange buildPartial() {
        com.impinj.stp.StpApi.SerialNumberRange result = new com.impinj.stp.StpApi.SerialNumberRange(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.serialNumberRangeStart_ = serialNumberRangeStart_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.serialNumberRangeEnd_ = serialNumberRangeEnd_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.bitOffset_ = bitOffset_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.serialNumberRangeFormat_ = serialNumberRangeFormat_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SerialNumberRange) {
          return mergeFrom((com.impinj.stp.StpApi.SerialNumberRange)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SerialNumberRange other) {
        if (other == com.impinj.stp.StpApi.SerialNumberRange.getDefaultInstance()) return this;
        if (other.hasSerialNumberRangeStart()) {
          setSerialNumberRangeStart(other.getSerialNumberRangeStart());
        }
        if (other.hasSerialNumberRangeEnd()) {
          setSerialNumberRangeEnd(other.getSerialNumberRangeEnd());
        }
        if (other.hasBitOffset()) {
          setBitOffset(other.getBitOffset());
        }
        if (other.hasSerialNumberRangeFormat()) {
          setSerialNumberRangeFormat(other.getSerialNumberRangeFormat());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SerialNumberRange parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SerialNumberRange) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint64 serial_number_range_start = 1;
      private long serialNumberRangeStart_ ;
      /**
       */
      public boolean hasSerialNumberRangeStart() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public long getSerialNumberRangeStart() {
        return serialNumberRangeStart_;
      }
      /**
       */
      public Builder setSerialNumberRangeStart(long value) {
        bitField0_ |= 0x00000001;
        serialNumberRangeStart_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearSerialNumberRangeStart() {
        bitField0_ = (bitField0_ & ~0x00000001);
        serialNumberRangeStart_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 serial_number_range_end = 2;
      private long serialNumberRangeEnd_ ;
      /**
       */
      public boolean hasSerialNumberRangeEnd() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public long getSerialNumberRangeEnd() {
        return serialNumberRangeEnd_;
      }
      /**
       */
      public Builder setSerialNumberRangeEnd(long value) {
        bitField0_ |= 0x00000002;
        serialNumberRangeEnd_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearSerialNumberRangeEnd() {
        bitField0_ = (bitField0_ & ~0x00000002);
        serialNumberRangeEnd_ = 0L;
        onChanged();
        return this;
      }

      // optional uint32 bit_offset = 3;
      private int bitOffset_ ;
      /**
       */
      public boolean hasBitOffset() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public int getBitOffset() {
        return bitOffset_;
      }
      /**
       */
      public Builder setBitOffset(int value) {
        bitField0_ |= 0x00000004;
        bitOffset_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearBitOffset() {
        bitField0_ = (bitField0_ & ~0x00000004);
        bitOffset_ = 0;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.SerialNumberRangeFormat serial_number_range_format = 4;
      private com.impinj.stp.StpApi.SerialNumberRangeFormat serialNumberRangeFormat_ = com.impinj.stp.StpApi.SerialNumberRangeFormat.SERIAL_NUMBER_RANGE_FORMAT_HEX;
      /**
       */
      public boolean hasSerialNumberRangeFormat() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.SerialNumberRangeFormat getSerialNumberRangeFormat() {
        return serialNumberRangeFormat_;
      }
      /**
       */
      public Builder setSerialNumberRangeFormat(com.impinj.stp.StpApi.SerialNumberRangeFormat value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        serialNumberRangeFormat_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearSerialNumberRangeFormat() {
        bitField0_ = (bitField0_ & ~0x00000008);
        serialNumberRangeFormat_ = com.impinj.stp.StpApi.SerialNumberRangeFormat.SERIAL_NUMBER_RANGE_FORMAT_HEX;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SerialNumberRange)
    }

    static {
      defaultInstance = new SerialNumberRange(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SerialNumberRange)
  }

  public interface UserMemoryOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes data = 1;
    /**
     *
     * data length must be a multiple of 16-bits, used in Encode
     * and Verify modes
     */
    boolean hasData();
    /**
     *
     * data length must be a multiple of 16-bits, used in Encode
     * and Verify modes
     */
    com.google.protobuf.ByteString getData();

    // optional bytes mask = 2;
    /**
     *
     * DEPRECATED
     */
    boolean hasMask();
    /**
     *
     * DEPRECATED
     */
    com.google.protobuf.ByteString getMask();

    // optional uint32 word_offset = 3 [default = 0];
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset.
     */
    boolean hasWordOffset();
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset.
     */
    int getWordOffset();

    // optional uint32 word_count_inv = 4 [default = 0];
    /**
     *
     * Number of words to read, used in Inventory mode, the default
     * of 0 means don't ready anything.
     */
    boolean hasWordCountInv();
    /**
     *
     * Number of words to read, used in Inventory mode, the default
     * of 0 means don't ready anything.
     */
    int getWordCountInv();
  }
  /**
   * Protobuf type {@code Impinj.STP.UserMemory}
   */
  public static final class UserMemory extends
      com.google.protobuf.GeneratedMessage
      implements UserMemoryOrBuilder {
    // Use UserMemory.newBuilder() to construct.
    private UserMemory(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UserMemory(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UserMemory defaultInstance;
    public static UserMemory getDefaultInstance() {
      return defaultInstance;
    }

    public UserMemory getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UserMemory(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              data_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              mask_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              wordOffset_ = input.readUInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              wordCountInv_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_UserMemory_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_UserMemory_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.UserMemory.class, com.impinj.stp.StpApi.UserMemory.Builder.class);
    }

    public static com.google.protobuf.Parser<UserMemory> PARSER =
        new com.google.protobuf.AbstractParser<UserMemory>() {
      public UserMemory parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UserMemory(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<UserMemory> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes data = 1;
    public static final int DATA_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString data_;
    /**
     *
     * data length must be a multiple of 16-bits, used in Encode
     * and Verify modes
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * data length must be a multiple of 16-bits, used in Encode
     * and Verify modes
     */
    public com.google.protobuf.ByteString getData() {
      return data_;
    }

    // optional bytes mask = 2;
    public static final int MASK_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString mask_;
    /**
     *
     * DEPRECATED
     */
    public boolean hasMask() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * DEPRECATED
     */
    public com.google.protobuf.ByteString getMask() {
      return mask_;
    }

    // optional uint32 word_offset = 3 [default = 0];
    public static final int WORD_OFFSET_FIELD_NUMBER = 3;
    private int wordOffset_;
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset.
     */
    public boolean hasWordOffset() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * If you don't want to start the data the beginning of memory,
     * specify this offset so that the data and mask start at your
     * specified word offset.
     */
    public int getWordOffset() {
      return wordOffset_;
    }

    // optional uint32 word_count_inv = 4 [default = 0];
    public static final int WORD_COUNT_INV_FIELD_NUMBER = 4;
    private int wordCountInv_;
    /**
     *
     * Number of words to read, used in Inventory mode, the default
     * of 0 means don't ready anything.
     */
    public boolean hasWordCountInv() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Number of words to read, used in Inventory mode, the default
     * of 0 means don't ready anything.
     */
    public int getWordCountInv() {
      return wordCountInv_;
    }

    private void initFields() {
      data_ = com.google.protobuf.ByteString.EMPTY;
      mask_ = com.google.protobuf.ByteString.EMPTY;
      wordOffset_ = 0;
      wordCountInv_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, mask_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(3, wordOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, wordCountInv_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, data_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, mask_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, wordOffset_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, wordCountInv_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.UserMemory parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.UserMemory parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.UserMemory parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.UserMemory parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.UserMemory parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.UserMemory parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.UserMemory parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.UserMemory parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.UserMemory parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.UserMemory parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.UserMemory prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.UserMemory}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.UserMemoryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_UserMemory_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_UserMemory_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.UserMemory.class, com.impinj.stp.StpApi.UserMemory.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.UserMemory.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        mask_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        wordOffset_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        wordCountInv_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_UserMemory_descriptor;
      }

      public com.impinj.stp.StpApi.UserMemory getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.UserMemory build() {
        com.impinj.stp.StpApi.UserMemory result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.UserMemory buildPartial() {
        com.impinj.stp.StpApi.UserMemory result = new com.impinj.stp.StpApi.UserMemory(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.mask_ = mask_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.wordOffset_ = wordOffset_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.wordCountInv_ = wordCountInv_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.UserMemory) {
          return mergeFrom((com.impinj.stp.StpApi.UserMemory)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.UserMemory other) {
        if (other == com.impinj.stp.StpApi.UserMemory.getDefaultInstance()) return this;
        if (other.hasData()) {
          setData(other.getData());
        }
        if (other.hasMask()) {
          setMask(other.getMask());
        }
        if (other.hasWordOffset()) {
          setWordOffset(other.getWordOffset());
        }
        if (other.hasWordCountInv()) {
          setWordCountInv(other.getWordCountInv());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.UserMemory parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.UserMemory) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes data = 1;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * data length must be a multiple of 16-bits, used in Encode
       * and Verify modes
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * data length must be a multiple of 16-bits, used in Encode
       * and Verify modes
       */
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      /**
       *
       * data length must be a multiple of 16-bits, used in Encode
       * and Verify modes
       */
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        data_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * data length must be a multiple of 16-bits, used in Encode
       * and Verify modes
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }

      // optional bytes mask = 2;
      private com.google.protobuf.ByteString mask_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * DEPRECATED
       */
      public boolean hasMask() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * DEPRECATED
       */
      public com.google.protobuf.ByteString getMask() {
        return mask_;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setMask(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        mask_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder clearMask() {
        bitField0_ = (bitField0_ & ~0x00000002);
        mask_ = getDefaultInstance().getMask();
        onChanged();
        return this;
      }

      // optional uint32 word_offset = 3 [default = 0];
      private int wordOffset_ ;
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset.
       */
      public boolean hasWordOffset() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset.
       */
      public int getWordOffset() {
        return wordOffset_;
      }
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset.
       */
      public Builder setWordOffset(int value) {
        bitField0_ |= 0x00000004;
        wordOffset_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * If you don't want to start the data the beginning of memory,
       * specify this offset so that the data and mask start at your
       * specified word offset.
       */
      public Builder clearWordOffset() {
        bitField0_ = (bitField0_ & ~0x00000004);
        wordOffset_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 word_count_inv = 4 [default = 0];
      private int wordCountInv_ ;
      /**
       *
       * Number of words to read, used in Inventory mode, the default
       * of 0 means don't ready anything.
       */
      public boolean hasWordCountInv() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Number of words to read, used in Inventory mode, the default
       * of 0 means don't ready anything.
       */
      public int getWordCountInv() {
        return wordCountInv_;
      }
      /**
       *
       * Number of words to read, used in Inventory mode, the default
       * of 0 means don't ready anything.
       */
      public Builder setWordCountInv(int value) {
        bitField0_ |= 0x00000008;
        wordCountInv_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Number of words to read, used in Inventory mode, the default
       * of 0 means don't ready anything.
       */
      public Builder clearWordCountInv() {
        bitField0_ = (bitField0_ & ~0x00000008);
        wordCountInv_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.UserMemory)
    }

    static {
      defaultInstance = new UserMemory(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.UserMemory)
  }

  public interface PasswordOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.PasswordGenerationMethod password_generation_method = 1 [default = PASSWORD_GENERATION_METHOD_STATIC];
    /**
     */
    boolean hasPasswordGenerationMethod();
    /**
     */
    com.impinj.stp.StpApi.PasswordGenerationMethod getPasswordGenerationMethod();

    // required bytes data = 2;
    /**
     *
     * A 32-bit password or passcode for Hash with TID as salt.
     */
    boolean hasData();
    /**
     *
     * A 32-bit password or passcode for Hash with TID as salt.
     */
    com.google.protobuf.ByteString getData();
  }
  /**
   * Protobuf type {@code Impinj.STP.Password}
   *
   * A password for accessing, securing, or locking a tag.
   */
  public static final class Password extends
      com.google.protobuf.GeneratedMessage
      implements PasswordOrBuilder {
    // Use Password.newBuilder() to construct.
    private Password(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Password(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Password defaultInstance;
    public static Password getDefaultInstance() {
      return defaultInstance;
    }

    public Password getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Password(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.PasswordGenerationMethod value = com.impinj.stp.StpApi.PasswordGenerationMethod.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                passwordGenerationMethod_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              data_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Password_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Password_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Password.class, com.impinj.stp.StpApi.Password.Builder.class);
    }

    public static com.google.protobuf.Parser<Password> PARSER =
        new com.google.protobuf.AbstractParser<Password>() {
      public Password parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Password(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Password> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.PasswordGenerationMethod password_generation_method = 1 [default = PASSWORD_GENERATION_METHOD_STATIC];
    public static final int PASSWORD_GENERATION_METHOD_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.PasswordGenerationMethod passwordGenerationMethod_;
    /**
     */
    public boolean hasPasswordGenerationMethod() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordGenerationMethod getPasswordGenerationMethod() {
      return passwordGenerationMethod_;
    }

    // required bytes data = 2;
    public static final int DATA_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString data_;
    /**
     *
     * A 32-bit password or passcode for Hash with TID as salt.
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * A 32-bit password or passcode for Hash with TID as salt.
     */
    public com.google.protobuf.ByteString getData() {
      return data_;
    }

    private void initFields() {
      passwordGenerationMethod_ = com.impinj.stp.StpApi.PasswordGenerationMethod.PASSWORD_GENERATION_METHOD_STATIC;
      data_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasData()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, passwordGenerationMethod_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, data_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, passwordGenerationMethod_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, data_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Password parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Password parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Password parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Password parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Password parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Password parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Password parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Password parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Password parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Password parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Password prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Password}
     *
     * A password for accessing, securing, or locking a tag.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.PasswordOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Password_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Password_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Password.class, com.impinj.stp.StpApi.Password.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Password.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        passwordGenerationMethod_ = com.impinj.stp.StpApi.PasswordGenerationMethod.PASSWORD_GENERATION_METHOD_STATIC;
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Password_descriptor;
      }

      public com.impinj.stp.StpApi.Password getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Password.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Password build() {
        com.impinj.stp.StpApi.Password result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Password buildPartial() {
        com.impinj.stp.StpApi.Password result = new com.impinj.stp.StpApi.Password(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.passwordGenerationMethod_ = passwordGenerationMethod_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.data_ = data_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Password) {
          return mergeFrom((com.impinj.stp.StpApi.Password)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Password other) {
        if (other == com.impinj.stp.StpApi.Password.getDefaultInstance()) return this;
        if (other.hasPasswordGenerationMethod()) {
          setPasswordGenerationMethod(other.getPasswordGenerationMethod());
        }
        if (other.hasData()) {
          setData(other.getData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasData()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Password parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Password) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.PasswordGenerationMethod password_generation_method = 1 [default = PASSWORD_GENERATION_METHOD_STATIC];
      private com.impinj.stp.StpApi.PasswordGenerationMethod passwordGenerationMethod_ = com.impinj.stp.StpApi.PasswordGenerationMethod.PASSWORD_GENERATION_METHOD_STATIC;
      /**
       */
      public boolean hasPasswordGenerationMethod() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordGenerationMethod getPasswordGenerationMethod() {
        return passwordGenerationMethod_;
      }
      /**
       */
      public Builder setPasswordGenerationMethod(com.impinj.stp.StpApi.PasswordGenerationMethod value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        passwordGenerationMethod_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearPasswordGenerationMethod() {
        bitField0_ = (bitField0_ & ~0x00000001);
        passwordGenerationMethod_ = com.impinj.stp.StpApi.PasswordGenerationMethod.PASSWORD_GENERATION_METHOD_STATIC;
        onChanged();
        return this;
      }

      // required bytes data = 2;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * A 32-bit password or passcode for Hash with TID as salt.
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * A 32-bit password or passcode for Hash with TID as salt.
       */
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      /**
       *
       * A 32-bit password or passcode for Hash with TID as salt.
       */
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        data_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * A 32-bit password or passcode for Hash with TID as salt.
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000002);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Password)
    }

    static {
      defaultInstance = new Password(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Password)
  }

  public interface LockConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required bytes lock_config_payload = 1;
    /**
     *
     * A binary string representation of the 20-bit Gen 2 lock
     * command  payload.
     */
    boolean hasLockConfigPayload();
    /**
     *
     * A binary string representation of the 20-bit Gen 2 lock
     * command  payload.
     */
    com.google.protobuf.ByteString getLockConfigPayload();
  }
  /**
   * Protobuf type {@code Impinj.STP.LockConfig}
   *
   * The Gen 2 lock payload.
   */
  public static final class LockConfig extends
      com.google.protobuf.GeneratedMessage
      implements LockConfigOrBuilder {
    // Use LockConfig.newBuilder() to construct.
    private LockConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LockConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LockConfig defaultInstance;
    public static LockConfig getDefaultInstance() {
      return defaultInstance;
    }

    public LockConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LockConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              lockConfigPayload_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LockConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LockConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.LockConfig.class, com.impinj.stp.StpApi.LockConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<LockConfig> PARSER =
        new com.google.protobuf.AbstractParser<LockConfig>() {
      public LockConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LockConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LockConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required bytes lock_config_payload = 1;
    public static final int LOCK_CONFIG_PAYLOAD_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString lockConfigPayload_;
    /**
     *
     * A binary string representation of the 20-bit Gen 2 lock
     * command  payload.
     */
    public boolean hasLockConfigPayload() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * A binary string representation of the 20-bit Gen 2 lock
     * command  payload.
     */
    public com.google.protobuf.ByteString getLockConfigPayload() {
      return lockConfigPayload_;
    }

    private void initFields() {
      lockConfigPayload_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasLockConfigPayload()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, lockConfigPayload_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, lockConfigPayload_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.LockConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LockConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LockConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LockConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LockConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LockConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LockConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.LockConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LockConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LockConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.LockConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.LockConfig}
     *
     * The Gen 2 lock payload.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.LockConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LockConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LockConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.LockConfig.class, com.impinj.stp.StpApi.LockConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.LockConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        lockConfigPayload_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LockConfig_descriptor;
      }

      public com.impinj.stp.StpApi.LockConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.LockConfig build() {
        com.impinj.stp.StpApi.LockConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.LockConfig buildPartial() {
        com.impinj.stp.StpApi.LockConfig result = new com.impinj.stp.StpApi.LockConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.lockConfigPayload_ = lockConfigPayload_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.LockConfig) {
          return mergeFrom((com.impinj.stp.StpApi.LockConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.LockConfig other) {
        if (other == com.impinj.stp.StpApi.LockConfig.getDefaultInstance()) return this;
        if (other.hasLockConfigPayload()) {
          setLockConfigPayload(other.getLockConfigPayload());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasLockConfigPayload()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.LockConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.LockConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required bytes lock_config_payload = 1;
      private com.google.protobuf.ByteString lockConfigPayload_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * A binary string representation of the 20-bit Gen 2 lock
       * command  payload.
       */
      public boolean hasLockConfigPayload() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * A binary string representation of the 20-bit Gen 2 lock
       * command  payload.
       */
      public com.google.protobuf.ByteString getLockConfigPayload() {
        return lockConfigPayload_;
      }
      /**
       *
       * A binary string representation of the 20-bit Gen 2 lock
       * command  payload.
       */
      public Builder setLockConfigPayload(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        lockConfigPayload_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * A binary string representation of the 20-bit Gen 2 lock
       * command  payload.
       */
      public Builder clearLockConfigPayload() {
        bitField0_ = (bitField0_ & ~0x00000001);
        lockConfigPayload_ = getDefaultInstance().getLockConfigPayload();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.LockConfig)
    }

    static {
      defaultInstance = new LockConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.LockConfig)
  }

  public interface BlockPermalockConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required uint32 block_pointer = 1;
    /**
     *
     * The starting address for BlockMask in units of 16-bit
     * blocks.
     */
    boolean hasBlockPointer();
    /**
     *
     * The starting address for BlockMask in units of 16-bit
     * blocks.
     */
    int getBlockPointer();

    // required bytes block_mask = 2;
    /**
     *
     * The blocks to lock, starting at BlockPointer and ending
     * ((16*(BlockMask array length)) - 1) blocks later.
     */
    boolean hasBlockMask();
    /**
     *
     * The blocks to lock, starting at BlockPointer and ending
     * ((16*(BlockMask array length)) - 1) blocks later.
     */
    com.google.protobuf.ByteString getBlockMask();
  }
  /**
   * Protobuf type {@code Impinj.STP.BlockPermalockConfig}
   *
   * Gen 2 BlockPermalock command (BlockPtr, BlockRange) on User
   * Memory  Bank - Read/Permalock behavior.
   */
  public static final class BlockPermalockConfig extends
      com.google.protobuf.GeneratedMessage
      implements BlockPermalockConfigOrBuilder {
    // Use BlockPermalockConfig.newBuilder() to construct.
    private BlockPermalockConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BlockPermalockConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final BlockPermalockConfig defaultInstance;
    public static BlockPermalockConfig getDefaultInstance() {
      return defaultInstance;
    }

    public BlockPermalockConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BlockPermalockConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              blockPointer_ = input.readUInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              blockMask_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_BlockPermalockConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_BlockPermalockConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.BlockPermalockConfig.class, com.impinj.stp.StpApi.BlockPermalockConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<BlockPermalockConfig> PARSER =
        new com.google.protobuf.AbstractParser<BlockPermalockConfig>() {
      public BlockPermalockConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new BlockPermalockConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<BlockPermalockConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required uint32 block_pointer = 1;
    public static final int BLOCK_POINTER_FIELD_NUMBER = 1;
    private int blockPointer_;
    /**
     *
     * The starting address for BlockMask in units of 16-bit
     * blocks.
     */
    public boolean hasBlockPointer() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * The starting address for BlockMask in units of 16-bit
     * blocks.
     */
    public int getBlockPointer() {
      return blockPointer_;
    }

    // required bytes block_mask = 2;
    public static final int BLOCK_MASK_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString blockMask_;
    /**
     *
     * The blocks to lock, starting at BlockPointer and ending
     * ((16*(BlockMask array length)) - 1) blocks later.
     */
    public boolean hasBlockMask() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * The blocks to lock, starting at BlockPointer and ending
     * ((16*(BlockMask array length)) - 1) blocks later.
     */
    public com.google.protobuf.ByteString getBlockMask() {
      return blockMask_;
    }

    private void initFields() {
      blockPointer_ = 0;
      blockMask_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasBlockPointer()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasBlockMask()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, blockPointer_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, blockMask_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, blockPointer_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, blockMask_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.BlockPermalockConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.BlockPermalockConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.BlockPermalockConfig}
     *
     * Gen 2 BlockPermalock command (BlockPtr, BlockRange) on User
     * Memory  Bank - Read/Permalock behavior.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_BlockPermalockConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_BlockPermalockConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.BlockPermalockConfig.class, com.impinj.stp.StpApi.BlockPermalockConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.BlockPermalockConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        blockPointer_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        blockMask_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_BlockPermalockConfig_descriptor;
      }

      public com.impinj.stp.StpApi.BlockPermalockConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.BlockPermalockConfig build() {
        com.impinj.stp.StpApi.BlockPermalockConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.BlockPermalockConfig buildPartial() {
        com.impinj.stp.StpApi.BlockPermalockConfig result = new com.impinj.stp.StpApi.BlockPermalockConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.blockPointer_ = blockPointer_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.blockMask_ = blockMask_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.BlockPermalockConfig) {
          return mergeFrom((com.impinj.stp.StpApi.BlockPermalockConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.BlockPermalockConfig other) {
        if (other == com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance()) return this;
        if (other.hasBlockPointer()) {
          setBlockPointer(other.getBlockPointer());
        }
        if (other.hasBlockMask()) {
          setBlockMask(other.getBlockMask());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasBlockPointer()) {
          
          return false;
        }
        if (!hasBlockMask()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.BlockPermalockConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.BlockPermalockConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required uint32 block_pointer = 1;
      private int blockPointer_ ;
      /**
       *
       * The starting address for BlockMask in units of 16-bit
       * blocks.
       */
      public boolean hasBlockPointer() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * The starting address for BlockMask in units of 16-bit
       * blocks.
       */
      public int getBlockPointer() {
        return blockPointer_;
      }
      /**
       *
       * The starting address for BlockMask in units of 16-bit
       * blocks.
       */
      public Builder setBlockPointer(int value) {
        bitField0_ |= 0x00000001;
        blockPointer_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The starting address for BlockMask in units of 16-bit
       * blocks.
       */
      public Builder clearBlockPointer() {
        bitField0_ = (bitField0_ & ~0x00000001);
        blockPointer_ = 0;
        onChanged();
        return this;
      }

      // required bytes block_mask = 2;
      private com.google.protobuf.ByteString blockMask_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * The blocks to lock, starting at BlockPointer and ending
       * ((16*(BlockMask array length)) - 1) blocks later.
       */
      public boolean hasBlockMask() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * The blocks to lock, starting at BlockPointer and ending
       * ((16*(BlockMask array length)) - 1) blocks later.
       */
      public com.google.protobuf.ByteString getBlockMask() {
        return blockMask_;
      }
      /**
       *
       * The blocks to lock, starting at BlockPointer and ending
       * ((16*(BlockMask array length)) - 1) blocks later.
       */
      public Builder setBlockMask(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        blockMask_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The blocks to lock, starting at BlockPointer and ending
       * ((16*(BlockMask array length)) - 1) blocks later.
       */
      public Builder clearBlockMask() {
        bitField0_ = (bitField0_ & ~0x00000002);
        blockMask_ = getDefaultInstance().getBlockMask();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.BlockPermalockConfig)
    }

    static {
      defaultInstance = new BlockPermalockConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.BlockPermalockConfig)
  }

  public interface MonzaR6PFeatureConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_auto_tune = 1;
    /**
     *
     * Enable Auto-tune
     */
    boolean hasEnableAutoTune();
    /**
     *
     * Enable Auto-tune
     */
    boolean getEnableAutoTune();

    // optional bool enable_short_range_mode = 2;
    /**
     *
     * Enable Short-Range mode
     */
    boolean hasEnableShortRangeMode();
    /**
     *
     * Enable Short-Range mode
     */
    boolean getEnableShortRangeMode();

    // optional .Impinj.STP.MonzaR6PMemoryMapConfig memory_map_config = 4;
    /**
     *
     * Configure tag memory map
     */
    boolean hasMemoryMapConfig();
    /**
     *
     * Configure tag memory map
     */
    com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig getMemoryMapConfig();
  }
  /**
   * Protobuf type {@code Impinj.STP.MonzaR6PFeatureConfig}
   *
   * Tag specific feature configuration for Monza R6P tags. All
   * three features must be specified. For further details, see:
   * https://support.impinj.com/hc/en-
   * us/articles/204793258-Monza-R6-P-Product-Datasheet
   */
  public static final class MonzaR6PFeatureConfig extends
      com.google.protobuf.GeneratedMessage
      implements MonzaR6PFeatureConfigOrBuilder {
    // Use MonzaR6PFeatureConfig.newBuilder() to construct.
    private MonzaR6PFeatureConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MonzaR6PFeatureConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MonzaR6PFeatureConfig defaultInstance;
    public static MonzaR6PFeatureConfig getDefaultInstance() {
      return defaultInstance;
    }

    public MonzaR6PFeatureConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MonzaR6PFeatureConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableAutoTune_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              enableShortRangeMode_ = input.readBool();
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig value = com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                memoryMapConfig_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6PFeatureConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6PFeatureConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig.class, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<MonzaR6PFeatureConfig> PARSER =
        new com.google.protobuf.AbstractParser<MonzaR6PFeatureConfig>() {
      public MonzaR6PFeatureConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MonzaR6PFeatureConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MonzaR6PFeatureConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_auto_tune = 1;
    public static final int ENABLE_AUTO_TUNE_FIELD_NUMBER = 1;
    private boolean enableAutoTune_;
    /**
     *
     * Enable Auto-tune
     */
    public boolean hasEnableAutoTune() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Enable Auto-tune
     */
    public boolean getEnableAutoTune() {
      return enableAutoTune_;
    }

    // optional bool enable_short_range_mode = 2;
    public static final int ENABLE_SHORT_RANGE_MODE_FIELD_NUMBER = 2;
    private boolean enableShortRangeMode_;
    /**
     *
     * Enable Short-Range mode
     */
    public boolean hasEnableShortRangeMode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Enable Short-Range mode
     */
    public boolean getEnableShortRangeMode() {
      return enableShortRangeMode_;
    }

    // optional .Impinj.STP.MonzaR6PMemoryMapConfig memory_map_config = 4;
    public static final int MEMORY_MAP_CONFIG_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig memoryMapConfig_;
    /**
     *
     * Configure tag memory map
     */
    public boolean hasMemoryMapConfig() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Configure tag memory map
     */
    public com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig getMemoryMapConfig() {
      return memoryMapConfig_;
    }

    private void initFields() {
      enableAutoTune_ = false;
      enableShortRangeMode_ = false;
      memoryMapConfig_ = com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig.MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableAutoTune_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, enableShortRangeMode_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(4, memoryMapConfig_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableAutoTune_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, enableShortRangeMode_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, memoryMapConfig_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6PFeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.MonzaR6PFeatureConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.MonzaR6PFeatureConfig}
     *
     * Tag specific feature configuration for Monza R6P tags. All
     * three features must be specified. For further details, see:
     * https://support.impinj.com/hc/en-
     * us/articles/204793258-Monza-R6-P-Product-Datasheet
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6PFeatureConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6PFeatureConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.MonzaR6PFeatureConfig.class, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.MonzaR6PFeatureConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableAutoTune_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        enableShortRangeMode_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        memoryMapConfig_ = com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig.MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6PFeatureConfig_descriptor;
      }

      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig build() {
        com.impinj.stp.StpApi.MonzaR6PFeatureConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig buildPartial() {
        com.impinj.stp.StpApi.MonzaR6PFeatureConfig result = new com.impinj.stp.StpApi.MonzaR6PFeatureConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableAutoTune_ = enableAutoTune_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.enableShortRangeMode_ = enableShortRangeMode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.memoryMapConfig_ = memoryMapConfig_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.MonzaR6PFeatureConfig) {
          return mergeFrom((com.impinj.stp.StpApi.MonzaR6PFeatureConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.MonzaR6PFeatureConfig other) {
        if (other == com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance()) return this;
        if (other.hasEnableAutoTune()) {
          setEnableAutoTune(other.getEnableAutoTune());
        }
        if (other.hasEnableShortRangeMode()) {
          setEnableShortRangeMode(other.getEnableShortRangeMode());
        }
        if (other.hasMemoryMapConfig()) {
          setMemoryMapConfig(other.getMemoryMapConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.MonzaR6PFeatureConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.MonzaR6PFeatureConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_auto_tune = 1;
      private boolean enableAutoTune_ ;
      /**
       *
       * Enable Auto-tune
       */
      public boolean hasEnableAutoTune() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Enable Auto-tune
       */
      public boolean getEnableAutoTune() {
        return enableAutoTune_;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder setEnableAutoTune(boolean value) {
        bitField0_ |= 0x00000001;
        enableAutoTune_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder clearEnableAutoTune() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableAutoTune_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_short_range_mode = 2;
      private boolean enableShortRangeMode_ ;
      /**
       *
       * Enable Short-Range mode
       */
      public boolean hasEnableShortRangeMode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Enable Short-Range mode
       */
      public boolean getEnableShortRangeMode() {
        return enableShortRangeMode_;
      }
      /**
       *
       * Enable Short-Range mode
       */
      public Builder setEnableShortRangeMode(boolean value) {
        bitField0_ |= 0x00000002;
        enableShortRangeMode_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Enable Short-Range mode
       */
      public Builder clearEnableShortRangeMode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        enableShortRangeMode_ = false;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.MonzaR6PMemoryMapConfig memory_map_config = 4;
      private com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig memoryMapConfig_ = com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig.MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER;
      /**
       *
       * Configure tag memory map
       */
      public boolean hasMemoryMapConfig() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Configure tag memory map
       */
      public com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig getMemoryMapConfig() {
        return memoryMapConfig_;
      }
      /**
       *
       * Configure tag memory map
       */
      public Builder setMemoryMapConfig(com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        memoryMapConfig_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Configure tag memory map
       */
      public Builder clearMemoryMapConfig() {
        bitField0_ = (bitField0_ & ~0x00000004);
        memoryMapConfig_ = com.impinj.stp.StpApi.MonzaR6PMemoryMapConfig.MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_64_BIT_USER;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.MonzaR6PFeatureConfig)
    }

    static {
      defaultInstance = new MonzaR6PFeatureConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.MonzaR6PFeatureConfig)
  }

  public interface MonzaS6CFeatureConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_auto_tune = 1;
    /**
     *
     * Enable Auto-tune
     */
    boolean hasEnableAutoTune();
    /**
     *
     * Enable Auto-tune
     */
    boolean getEnableAutoTune();

    // optional bool enable_short_range_mode = 2;
    /**
     *
     * Enable Short-Range mode
     */
    boolean hasEnableShortRangeMode();
    /**
     *
     * Enable Short-Range mode
     */
    boolean getEnableShortRangeMode();
  }
  /**
   * Protobuf type {@code Impinj.STP.MonzaS6CFeatureConfig}
   *
   * Tag specific feature configuration for Monza S6C tags. Both
   * features must be specified. For further details, see:
   * https://support.impinj.com/hc/en-
   * us/articles/205744047-Monza-S6-C-Product-Datasheet
   */
  public static final class MonzaS6CFeatureConfig extends
      com.google.protobuf.GeneratedMessage
      implements MonzaS6CFeatureConfigOrBuilder {
    // Use MonzaS6CFeatureConfig.newBuilder() to construct.
    private MonzaS6CFeatureConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MonzaS6CFeatureConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MonzaS6CFeatureConfig defaultInstance;
    public static MonzaS6CFeatureConfig getDefaultInstance() {
      return defaultInstance;
    }

    public MonzaS6CFeatureConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MonzaS6CFeatureConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableAutoTune_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              enableShortRangeMode_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaS6CFeatureConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaS6CFeatureConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig.class, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<MonzaS6CFeatureConfig> PARSER =
        new com.google.protobuf.AbstractParser<MonzaS6CFeatureConfig>() {
      public MonzaS6CFeatureConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MonzaS6CFeatureConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MonzaS6CFeatureConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_auto_tune = 1;
    public static final int ENABLE_AUTO_TUNE_FIELD_NUMBER = 1;
    private boolean enableAutoTune_;
    /**
     *
     * Enable Auto-tune
     */
    public boolean hasEnableAutoTune() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Enable Auto-tune
     */
    public boolean getEnableAutoTune() {
      return enableAutoTune_;
    }

    // optional bool enable_short_range_mode = 2;
    public static final int ENABLE_SHORT_RANGE_MODE_FIELD_NUMBER = 2;
    private boolean enableShortRangeMode_;
    /**
     *
     * Enable Short-Range mode
     */
    public boolean hasEnableShortRangeMode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Enable Short-Range mode
     */
    public boolean getEnableShortRangeMode() {
      return enableShortRangeMode_;
    }

    private void initFields() {
      enableAutoTune_ = false;
      enableShortRangeMode_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableAutoTune_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, enableShortRangeMode_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableAutoTune_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, enableShortRangeMode_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaS6CFeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.MonzaS6CFeatureConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.MonzaS6CFeatureConfig}
     *
     * Tag specific feature configuration for Monza S6C tags. Both
     * features must be specified. For further details, see:
     * https://support.impinj.com/hc/en-
     * us/articles/205744047-Monza-S6-C-Product-Datasheet
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaS6CFeatureConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaS6CFeatureConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.MonzaS6CFeatureConfig.class, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.MonzaS6CFeatureConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableAutoTune_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        enableShortRangeMode_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaS6CFeatureConfig_descriptor;
      }

      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig build() {
        com.impinj.stp.StpApi.MonzaS6CFeatureConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig buildPartial() {
        com.impinj.stp.StpApi.MonzaS6CFeatureConfig result = new com.impinj.stp.StpApi.MonzaS6CFeatureConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableAutoTune_ = enableAutoTune_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.enableShortRangeMode_ = enableShortRangeMode_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.MonzaS6CFeatureConfig) {
          return mergeFrom((com.impinj.stp.StpApi.MonzaS6CFeatureConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.MonzaS6CFeatureConfig other) {
        if (other == com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance()) return this;
        if (other.hasEnableAutoTune()) {
          setEnableAutoTune(other.getEnableAutoTune());
        }
        if (other.hasEnableShortRangeMode()) {
          setEnableShortRangeMode(other.getEnableShortRangeMode());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.MonzaS6CFeatureConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.MonzaS6CFeatureConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_auto_tune = 1;
      private boolean enableAutoTune_ ;
      /**
       *
       * Enable Auto-tune
       */
      public boolean hasEnableAutoTune() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Enable Auto-tune
       */
      public boolean getEnableAutoTune() {
        return enableAutoTune_;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder setEnableAutoTune(boolean value) {
        bitField0_ |= 0x00000001;
        enableAutoTune_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder clearEnableAutoTune() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableAutoTune_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_short_range_mode = 2;
      private boolean enableShortRangeMode_ ;
      /**
       *
       * Enable Short-Range mode
       */
      public boolean hasEnableShortRangeMode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Enable Short-Range mode
       */
      public boolean getEnableShortRangeMode() {
        return enableShortRangeMode_;
      }
      /**
       *
       * Enable Short-Range mode
       */
      public Builder setEnableShortRangeMode(boolean value) {
        bitField0_ |= 0x00000002;
        enableShortRangeMode_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Enable Short-Range mode
       */
      public Builder clearEnableShortRangeMode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        enableShortRangeMode_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.MonzaS6CFeatureConfig)
    }

    static {
      defaultInstance = new MonzaS6CFeatureConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.MonzaS6CFeatureConfig)
  }

  public interface MonzaR6FeatureConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_auto_tune = 1;
    /**
     *
     * Enable Auto-tune
     */
    boolean hasEnableAutoTune();
    /**
     *
     * Enable Auto-tune
     */
    boolean getEnableAutoTune();
  }
  /**
   * Protobuf type {@code Impinj.STP.MonzaR6FeatureConfig}
   *
   * Tag specific feature configuration for Monza R6 tags. For
   * further details, see: https://support.impinj.com/hc/en-
   * us/articles/202765328-Monza-R6-Product-Datasheet
   */
  public static final class MonzaR6FeatureConfig extends
      com.google.protobuf.GeneratedMessage
      implements MonzaR6FeatureConfigOrBuilder {
    // Use MonzaR6FeatureConfig.newBuilder() to construct.
    private MonzaR6FeatureConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MonzaR6FeatureConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MonzaR6FeatureConfig defaultInstance;
    public static MonzaR6FeatureConfig getDefaultInstance() {
      return defaultInstance;
    }

    public MonzaR6FeatureConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MonzaR6FeatureConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableAutoTune_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6FeatureConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6FeatureConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.MonzaR6FeatureConfig.class, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<MonzaR6FeatureConfig> PARSER =
        new com.google.protobuf.AbstractParser<MonzaR6FeatureConfig>() {
      public MonzaR6FeatureConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MonzaR6FeatureConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MonzaR6FeatureConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_auto_tune = 1;
    public static final int ENABLE_AUTO_TUNE_FIELD_NUMBER = 1;
    private boolean enableAutoTune_;
    /**
     *
     * Enable Auto-tune
     */
    public boolean hasEnableAutoTune() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Enable Auto-tune
     */
    public boolean getEnableAutoTune() {
      return enableAutoTune_;
    }

    private void initFields() {
      enableAutoTune_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableAutoTune_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableAutoTune_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6FeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.MonzaR6FeatureConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.MonzaR6FeatureConfig}
     *
     * Tag specific feature configuration for Monza R6 tags. For
     * further details, see: https://support.impinj.com/hc/en-
     * us/articles/202765328-Monza-R6-Product-Datasheet
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6FeatureConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6FeatureConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.MonzaR6FeatureConfig.class, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.MonzaR6FeatureConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableAutoTune_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6FeatureConfig_descriptor;
      }

      public com.impinj.stp.StpApi.MonzaR6FeatureConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.MonzaR6FeatureConfig build() {
        com.impinj.stp.StpApi.MonzaR6FeatureConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.MonzaR6FeatureConfig buildPartial() {
        com.impinj.stp.StpApi.MonzaR6FeatureConfig result = new com.impinj.stp.StpApi.MonzaR6FeatureConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableAutoTune_ = enableAutoTune_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.MonzaR6FeatureConfig) {
          return mergeFrom((com.impinj.stp.StpApi.MonzaR6FeatureConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.MonzaR6FeatureConfig other) {
        if (other == com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance()) return this;
        if (other.hasEnableAutoTune()) {
          setEnableAutoTune(other.getEnableAutoTune());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.MonzaR6FeatureConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.MonzaR6FeatureConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_auto_tune = 1;
      private boolean enableAutoTune_ ;
      /**
       *
       * Enable Auto-tune
       */
      public boolean hasEnableAutoTune() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Enable Auto-tune
       */
      public boolean getEnableAutoTune() {
        return enableAutoTune_;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder setEnableAutoTune(boolean value) {
        bitField0_ |= 0x00000001;
        enableAutoTune_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder clearEnableAutoTune() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableAutoTune_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.MonzaR6FeatureConfig)
    }

    static {
      defaultInstance = new MonzaR6FeatureConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.MonzaR6FeatureConfig)
  }

  public interface MonzaR6AFeatureConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_auto_tune = 1;
    /**
     *
     * Enable Auto-tune
     */
    boolean hasEnableAutoTune();
    /**
     *
     * Enable Auto-tune
     */
    boolean getEnableAutoTune();

    // optional bool enable_short_range_mode = 2;
    /**
     *
     * Enable Short-Range mode
     */
    boolean hasEnableShortRangeMode();
    /**
     *
     * Enable Short-Range mode
     */
    boolean getEnableShortRangeMode();
  }
  /**
   * Protobuf type {@code Impinj.STP.MonzaR6AFeatureConfig}
   *
   * Tag specific feature configuration for Monza R6-A tags. For
   * further details, see: https://support.impinj.com/hc/en-
   * us/articles/115001376564-Monza-R6-A-Product-Brief-Datasheet
   */
  public static final class MonzaR6AFeatureConfig extends
      com.google.protobuf.GeneratedMessage
      implements MonzaR6AFeatureConfigOrBuilder {
    // Use MonzaR6AFeatureConfig.newBuilder() to construct.
    private MonzaR6AFeatureConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MonzaR6AFeatureConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MonzaR6AFeatureConfig defaultInstance;
    public static MonzaR6AFeatureConfig getDefaultInstance() {
      return defaultInstance;
    }

    public MonzaR6AFeatureConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MonzaR6AFeatureConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableAutoTune_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              enableShortRangeMode_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6AFeatureConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6AFeatureConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig.class, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<MonzaR6AFeatureConfig> PARSER =
        new com.google.protobuf.AbstractParser<MonzaR6AFeatureConfig>() {
      public MonzaR6AFeatureConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MonzaR6AFeatureConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MonzaR6AFeatureConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_auto_tune = 1;
    public static final int ENABLE_AUTO_TUNE_FIELD_NUMBER = 1;
    private boolean enableAutoTune_;
    /**
     *
     * Enable Auto-tune
     */
    public boolean hasEnableAutoTune() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Enable Auto-tune
     */
    public boolean getEnableAutoTune() {
      return enableAutoTune_;
    }

    // optional bool enable_short_range_mode = 2;
    public static final int ENABLE_SHORT_RANGE_MODE_FIELD_NUMBER = 2;
    private boolean enableShortRangeMode_;
    /**
     *
     * Enable Short-Range mode
     */
    public boolean hasEnableShortRangeMode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Enable Short-Range mode
     */
    public boolean getEnableShortRangeMode() {
      return enableShortRangeMode_;
    }

    private void initFields() {
      enableAutoTune_ = false;
      enableShortRangeMode_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableAutoTune_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, enableShortRangeMode_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableAutoTune_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, enableShortRangeMode_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.MonzaR6AFeatureConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.MonzaR6AFeatureConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.MonzaR6AFeatureConfig}
     *
     * Tag specific feature configuration for Monza R6-A tags. For
     * further details, see: https://support.impinj.com/hc/en-
     * us/articles/115001376564-Monza-R6-A-Product-Brief-Datasheet
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6AFeatureConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6AFeatureConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.MonzaR6AFeatureConfig.class, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.MonzaR6AFeatureConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableAutoTune_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        enableShortRangeMode_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_MonzaR6AFeatureConfig_descriptor;
      }

      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig build() {
        com.impinj.stp.StpApi.MonzaR6AFeatureConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig buildPartial() {
        com.impinj.stp.StpApi.MonzaR6AFeatureConfig result = new com.impinj.stp.StpApi.MonzaR6AFeatureConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableAutoTune_ = enableAutoTune_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.enableShortRangeMode_ = enableShortRangeMode_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.MonzaR6AFeatureConfig) {
          return mergeFrom((com.impinj.stp.StpApi.MonzaR6AFeatureConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.MonzaR6AFeatureConfig other) {
        if (other == com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance()) return this;
        if (other.hasEnableAutoTune()) {
          setEnableAutoTune(other.getEnableAutoTune());
        }
        if (other.hasEnableShortRangeMode()) {
          setEnableShortRangeMode(other.getEnableShortRangeMode());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.MonzaR6AFeatureConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.MonzaR6AFeatureConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_auto_tune = 1;
      private boolean enableAutoTune_ ;
      /**
       *
       * Enable Auto-tune
       */
      public boolean hasEnableAutoTune() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Enable Auto-tune
       */
      public boolean getEnableAutoTune() {
        return enableAutoTune_;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder setEnableAutoTune(boolean value) {
        bitField0_ |= 0x00000001;
        enableAutoTune_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Enable Auto-tune
       */
      public Builder clearEnableAutoTune() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableAutoTune_ = false;
        onChanged();
        return this;
      }

      // optional bool enable_short_range_mode = 2;
      private boolean enableShortRangeMode_ ;
      /**
       *
       * Enable Short-Range mode
       */
      public boolean hasEnableShortRangeMode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Enable Short-Range mode
       */
      public boolean getEnableShortRangeMode() {
        return enableShortRangeMode_;
      }
      /**
       *
       * Enable Short-Range mode
       */
      public Builder setEnableShortRangeMode(boolean value) {
        bitField0_ |= 0x00000002;
        enableShortRangeMode_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Enable Short-Range mode
       */
      public Builder clearEnableShortRangeMode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        enableShortRangeMode_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.MonzaR6AFeatureConfig)
    }

    static {
      defaultInstance = new MonzaR6AFeatureConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.MonzaR6AFeatureConfig)
  }

  public interface TIDTableEntryOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required bytes TID = 1;
    /**
     *
     * The TID of the tag for these encoding actions to be
     * performed  on.
     */
    boolean hasTID();
    /**
     *
     * The TID of the tag for these encoding actions to be
     * performed  on.
     */
    com.google.protobuf.ByteString getTID();

    // optional .Impinj.STP.EPCMemory EPC_memory = 3;
    /**
     *
     * 2 DEPRECATED
     */
    boolean hasEPCMemory();
    /**
     *
     * 2 DEPRECATED
     */
    com.impinj.stp.StpApi.EPCMemory getEPCMemory();
    /**
     *
     * 2 DEPRECATED
     */
    com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder();

    // optional .Impinj.STP.TIDMemory TID_memory = 4;
    /**
     *
     * This is the TID memory to write.  In tags such as Monza4QT
     * or UCodeX, there is writable memory in the TID memory bank
     * after the read-only unique serialized TID bits.
     */
    boolean hasTIDMemory();
    /**
     *
     * This is the TID memory to write.  In tags such as Monza4QT
     * or UCodeX, there is writable memory in the TID memory bank
     * after the read-only unique serialized TID bits.
     */
    com.impinj.stp.StpApi.TIDMemory getTIDMemory();
    /**
     *
     * This is the TID memory to write.  In tags such as Monza4QT
     * or UCodeX, there is writable memory in the TID memory bank
     * after the read-only unique serialized TID bits.
     */
    com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder();

    // optional .Impinj.STP.UserMemory user_memory = 5;
    /**
     */
    boolean hasUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemory getUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder();

    // optional .Impinj.STP.Password secure_password = 6;
    /**
     */
    boolean hasSecurePassword();
    /**
     */
    com.impinj.stp.StpApi.Password getSecurePassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder();

    // optional .Impinj.STP.Password access_password = 7;
    /**
     */
    boolean hasAccessPassword();
    /**
     */
    com.impinj.stp.StpApi.Password getAccessPassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder();

    // optional .Impinj.STP.Password kill_password = 8;
    /**
     */
    boolean hasKillPassword();
    /**
     */
    com.impinj.stp.StpApi.Password getKillPassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder();

    // optional .Impinj.STP.LockConfig lock_config = 9;
    /**
     */
    boolean hasLockConfig();
    /**
     */
    com.impinj.stp.StpApi.LockConfig getLockConfig();
    /**
     */
    com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder();

    // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 10;
    /**
     *
     * NOT YET SUPPORTED
     */
    boolean hasBlockpermalockConfig();
    /**
     *
     * NOT YET SUPPORTED
     */
    com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig();
    /**
     *
     * NOT YET SUPPORTED
     */
    com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder();

    // optional bool kill_tag = 12;
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 11;
     */
    boolean hasKillTag();
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 11;
     */
    boolean getKillTag();

    // optional bool void_tag = 13;
    /**
     */
    boolean hasVoidTag();
    /**
     */
    boolean getVoidTag();

    // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 14;
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6PFeatureConfig();
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig();
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 15;
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaS6CFeatureConfig();
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig();
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 16;
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6FeatureConfig();
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig();
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 17;
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6AFeatureConfig();
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig();
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.TIDTableEntry}
   *
   * Describes the operation to perform on a single tag.
   */
  public static final class TIDTableEntry extends
      com.google.protobuf.GeneratedMessage
      implements TIDTableEntryOrBuilder {
    // Use TIDTableEntry.newBuilder() to construct.
    private TIDTableEntry(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TIDTableEntry(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TIDTableEntry defaultInstance;
    public static TIDTableEntry getDefaultInstance() {
      return defaultInstance;
    }

    public TIDTableEntry getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TIDTableEntry(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              tID_ = input.readBytes();
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.EPCMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = ePCMemory_.toBuilder();
              }
              ePCMemory_ = input.readMessage(com.impinj.stp.StpApi.EPCMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ePCMemory_);
                ePCMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 34: {
              com.impinj.stp.StpApi.TIDMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = tIDMemory_.toBuilder();
              }
              tIDMemory_ = input.readMessage(com.impinj.stp.StpApi.TIDMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tIDMemory_);
                tIDMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.UserMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = userMemory_.toBuilder();
              }
              userMemory_ = input.readMessage(com.impinj.stp.StpApi.UserMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(userMemory_);
                userMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = securePassword_.toBuilder();
              }
              securePassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(securePassword_);
                securePassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 58: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = accessPassword_.toBuilder();
              }
              accessPassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(accessPassword_);
                accessPassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 66: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = killPassword_.toBuilder();
              }
              killPassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(killPassword_);
                killPassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 74: {
              com.impinj.stp.StpApi.LockConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = lockConfig_.toBuilder();
              }
              lockConfig_ = input.readMessage(com.impinj.stp.StpApi.LockConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(lockConfig_);
                lockConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 82: {
              com.impinj.stp.StpApi.BlockPermalockConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = blockpermalockConfig_.toBuilder();
              }
              blockpermalockConfig_ = input.readMessage(com.impinj.stp.StpApi.BlockPermalockConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(blockpermalockConfig_);
                blockpermalockConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 96: {
              bitField0_ |= 0x00000200;
              killTag_ = input.readBool();
              break;
            }
            case 104: {
              bitField0_ |= 0x00000400;
              voidTag_ = input.readBool();
              break;
            }
            case 114: {
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) == 0x00000800)) {
                subBuilder = monzaR6PFeatureConfig_.toBuilder();
              }
              monzaR6PFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6PFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6PFeatureConfig_);
                monzaR6PFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
            case 122: {
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00001000) == 0x00001000)) {
                subBuilder = monzaS6CFeatureConfig_.toBuilder();
              }
              monzaS6CFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaS6CFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaS6CFeatureConfig_);
                monzaS6CFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00001000;
              break;
            }
            case 130: {
              com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00002000) == 0x00002000)) {
                subBuilder = monzaR6FeatureConfig_.toBuilder();
              }
              monzaR6FeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6FeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6FeatureConfig_);
                monzaR6FeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00002000;
              break;
            }
            case 138: {
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00004000) == 0x00004000)) {
                subBuilder = monzaR6AFeatureConfig_.toBuilder();
              }
              monzaR6AFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6AFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6AFeatureConfig_);
                monzaR6AFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00004000;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntry_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntry_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TIDTableEntry.class, com.impinj.stp.StpApi.TIDTableEntry.Builder.class);
    }

    public static com.google.protobuf.Parser<TIDTableEntry> PARSER =
        new com.google.protobuf.AbstractParser<TIDTableEntry>() {
      public TIDTableEntry parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TIDTableEntry(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TIDTableEntry> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required bytes TID = 1;
    public static final int TID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString tID_;
    /**
     *
     * The TID of the tag for these encoding actions to be
     * performed  on.
     */
    public boolean hasTID() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * The TID of the tag for these encoding actions to be
     * performed  on.
     */
    public com.google.protobuf.ByteString getTID() {
      return tID_;
    }

    // optional .Impinj.STP.EPCMemory EPC_memory = 3;
    public static final int EPC_MEMORY_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.EPCMemory ePCMemory_;
    /**
     *
     * 2 DEPRECATED
     */
    public boolean hasEPCMemory() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * 2 DEPRECATED
     */
    public com.impinj.stp.StpApi.EPCMemory getEPCMemory() {
      return ePCMemory_;
    }
    /**
     *
     * 2 DEPRECATED
     */
    public com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder() {
      return ePCMemory_;
    }

    // optional .Impinj.STP.TIDMemory TID_memory = 4;
    public static final int TID_MEMORY_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.TIDMemory tIDMemory_;
    /**
     *
     * This is the TID memory to write.  In tags such as Monza4QT
     * or UCodeX, there is writable memory in the TID memory bank
     * after the read-only unique serialized TID bits.
     */
    public boolean hasTIDMemory() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * This is the TID memory to write.  In tags such as Monza4QT
     * or UCodeX, there is writable memory in the TID memory bank
     * after the read-only unique serialized TID bits.
     */
    public com.impinj.stp.StpApi.TIDMemory getTIDMemory() {
      return tIDMemory_;
    }
    /**
     *
     * This is the TID memory to write.  In tags such as Monza4QT
     * or UCodeX, there is writable memory in the TID memory bank
     * after the read-only unique serialized TID bits.
     */
    public com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder() {
      return tIDMemory_;
    }

    // optional .Impinj.STP.UserMemory user_memory = 5;
    public static final int USER_MEMORY_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.UserMemory userMemory_;
    /**
     */
    public boolean hasUserMemory() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemory getUserMemory() {
      return userMemory_;
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
      return userMemory_;
    }

    // optional .Impinj.STP.Password secure_password = 6;
    public static final int SECURE_PASSWORD_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.Password securePassword_;
    /**
     */
    public boolean hasSecurePassword() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getSecurePassword() {
      return securePassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder() {
      return securePassword_;
    }

    // optional .Impinj.STP.Password access_password = 7;
    public static final int ACCESS_PASSWORD_FIELD_NUMBER = 7;
    private com.impinj.stp.StpApi.Password accessPassword_;
    /**
     */
    public boolean hasAccessPassword() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getAccessPassword() {
      return accessPassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder() {
      return accessPassword_;
    }

    // optional .Impinj.STP.Password kill_password = 8;
    public static final int KILL_PASSWORD_FIELD_NUMBER = 8;
    private com.impinj.stp.StpApi.Password killPassword_;
    /**
     */
    public boolean hasKillPassword() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getKillPassword() {
      return killPassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder() {
      return killPassword_;
    }

    // optional .Impinj.STP.LockConfig lock_config = 9;
    public static final int LOCK_CONFIG_FIELD_NUMBER = 9;
    private com.impinj.stp.StpApi.LockConfig lockConfig_;
    /**
     */
    public boolean hasLockConfig() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     */
    public com.impinj.stp.StpApi.LockConfig getLockConfig() {
      return lockConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder() {
      return lockConfig_;
    }

    // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 10;
    public static final int BLOCKPERMALOCK_CONFIG_FIELD_NUMBER = 10;
    private com.impinj.stp.StpApi.BlockPermalockConfig blockpermalockConfig_;
    /**
     *
     * NOT YET SUPPORTED
     */
    public boolean hasBlockpermalockConfig() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     *
     * NOT YET SUPPORTED
     */
    public com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig() {
      return blockpermalockConfig_;
    }
    /**
     *
     * NOT YET SUPPORTED
     */
    public com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder() {
      return blockpermalockConfig_;
    }

    // optional bool kill_tag = 12;
    public static final int KILL_TAG_FIELD_NUMBER = 12;
    private boolean killTag_;
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 11;
     */
    public boolean hasKillTag() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 11;
     */
    public boolean getKillTag() {
      return killTag_;
    }

    // optional bool void_tag = 13;
    public static final int VOID_TAG_FIELD_NUMBER = 13;
    private boolean voidTag_;
    /**
     */
    public boolean hasVoidTag() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     */
    public boolean getVoidTag() {
      return voidTag_;
    }

    // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 14;
    public static final int MONZA_R6P_FEATURE_CONFIG_FIELD_NUMBER = 14;
    private com.impinj.stp.StpApi.MonzaR6PFeatureConfig monzaR6PFeatureConfig_;
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6PFeatureConfig() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig() {
      return monzaR6PFeatureConfig_;
    }
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder() {
      return monzaR6PFeatureConfig_;
    }

    // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 15;
    public static final int MONZA_S6C_FEATURE_CONFIG_FIELD_NUMBER = 15;
    private com.impinj.stp.StpApi.MonzaS6CFeatureConfig monzaS6CFeatureConfig_;
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaS6CFeatureConfig() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig() {
      return monzaS6CFeatureConfig_;
    }
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder() {
      return monzaS6CFeatureConfig_;
    }

    // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 16;
    public static final int MONZA_R6_FEATURE_CONFIG_FIELD_NUMBER = 16;
    private com.impinj.stp.StpApi.MonzaR6FeatureConfig monzaR6FeatureConfig_;
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6FeatureConfig() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig() {
      return monzaR6FeatureConfig_;
    }
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder() {
      return monzaR6FeatureConfig_;
    }

    // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 17;
    public static final int MONZA_R6A_FEATURE_CONFIG_FIELD_NUMBER = 17;
    private com.impinj.stp.StpApi.MonzaR6AFeatureConfig monzaR6AFeatureConfig_;
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6AFeatureConfig() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig() {
      return monzaR6AFeatureConfig_;
    }
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder() {
      return monzaR6AFeatureConfig_;
    }

    private void initFields() {
      tID_ = com.google.protobuf.ByteString.EMPTY;
      ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
      tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
      userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
      blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
      killTag_ = false;
      voidTag_ = false;
      monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
      monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
      monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
      monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasTID()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasEPCMemory()) {
        if (!getEPCMemory().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasTIDMemory()) {
        if (!getTIDMemory().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSecurePassword()) {
        if (!getSecurePassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAccessPassword()) {
        if (!getAccessPassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasKillPassword()) {
        if (!getKillPassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasLockConfig()) {
        if (!getLockConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasBlockpermalockConfig()) {
        if (!getBlockpermalockConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, tID_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(3, ePCMemory_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(4, tIDMemory_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(5, userMemory_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(6, securePassword_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(7, accessPassword_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(8, killPassword_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(9, lockConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(10, blockpermalockConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBool(12, killTag_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBool(13, voidTag_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeMessage(14, monzaR6PFeatureConfig_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeMessage(15, monzaS6CFeatureConfig_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeMessage(16, monzaR6FeatureConfig_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeMessage(17, monzaR6AFeatureConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, tID_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, ePCMemory_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, tIDMemory_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, userMemory_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, securePassword_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, accessPassword_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, killPassword_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, lockConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, blockpermalockConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, killTag_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, voidTag_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, monzaR6PFeatureConfig_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, monzaS6CFeatureConfig_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, monzaR6FeatureConfig_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, monzaR6AFeatureConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDTableEntry parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TIDTableEntry prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TIDTableEntry}
     *
     * Describes the operation to perform on a single tag.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TIDTableEntryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntry_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntry_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TIDTableEntry.class, com.impinj.stp.StpApi.TIDTableEntry.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TIDTableEntry.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEPCMemoryFieldBuilder();
          getTIDMemoryFieldBuilder();
          getUserMemoryFieldBuilder();
          getSecurePasswordFieldBuilder();
          getAccessPasswordFieldBuilder();
          getKillPasswordFieldBuilder();
          getLockConfigFieldBuilder();
          getBlockpermalockConfigFieldBuilder();
          getMonzaR6PFeatureConfigFieldBuilder();
          getMonzaS6CFeatureConfigFieldBuilder();
          getMonzaR6FeatureConfigFieldBuilder();
          getMonzaR6AFeatureConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        tID_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
        } else {
          ePCMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
        } else {
          tIDMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (securePasswordBuilder_ == null) {
          securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          securePasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          accessPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (killPasswordBuilder_ == null) {
          killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          killPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (lockConfigBuilder_ == null) {
          lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
        } else {
          lockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
        } else {
          blockpermalockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        killTag_ = false;
        bitField0_ = (bitField0_ & ~0x00000200);
        voidTag_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
        } else {
          monzaR6PFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
        } else {
          monzaS6CFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
        } else {
          monzaR6FeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
        } else {
          monzaR6AFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntry_descriptor;
      }

      public com.impinj.stp.StpApi.TIDTableEntry getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TIDTableEntry.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TIDTableEntry build() {
        com.impinj.stp.StpApi.TIDTableEntry result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TIDTableEntry buildPartial() {
        com.impinj.stp.StpApi.TIDTableEntry result = new com.impinj.stp.StpApi.TIDTableEntry(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tID_ = tID_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (ePCMemoryBuilder_ == null) {
          result.ePCMemory_ = ePCMemory_;
        } else {
          result.ePCMemory_ = ePCMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (tIDMemoryBuilder_ == null) {
          result.tIDMemory_ = tIDMemory_;
        } else {
          result.tIDMemory_ = tIDMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (userMemoryBuilder_ == null) {
          result.userMemory_ = userMemory_;
        } else {
          result.userMemory_ = userMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (securePasswordBuilder_ == null) {
          result.securePassword_ = securePassword_;
        } else {
          result.securePassword_ = securePasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (accessPasswordBuilder_ == null) {
          result.accessPassword_ = accessPassword_;
        } else {
          result.accessPassword_ = accessPasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (killPasswordBuilder_ == null) {
          result.killPassword_ = killPassword_;
        } else {
          result.killPassword_ = killPasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (lockConfigBuilder_ == null) {
          result.lockConfig_ = lockConfig_;
        } else {
          result.lockConfig_ = lockConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (blockpermalockConfigBuilder_ == null) {
          result.blockpermalockConfig_ = blockpermalockConfig_;
        } else {
          result.blockpermalockConfig_ = blockpermalockConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.killTag_ = killTag_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.voidTag_ = voidTag_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        if (monzaR6PFeatureConfigBuilder_ == null) {
          result.monzaR6PFeatureConfig_ = monzaR6PFeatureConfig_;
        } else {
          result.monzaR6PFeatureConfig_ = monzaR6PFeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        if (monzaS6CFeatureConfigBuilder_ == null) {
          result.monzaS6CFeatureConfig_ = monzaS6CFeatureConfig_;
        } else {
          result.monzaS6CFeatureConfig_ = monzaS6CFeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        if (monzaR6FeatureConfigBuilder_ == null) {
          result.monzaR6FeatureConfig_ = monzaR6FeatureConfig_;
        } else {
          result.monzaR6FeatureConfig_ = monzaR6FeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        if (monzaR6AFeatureConfigBuilder_ == null) {
          result.monzaR6AFeatureConfig_ = monzaR6AFeatureConfig_;
        } else {
          result.monzaR6AFeatureConfig_ = monzaR6AFeatureConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TIDTableEntry) {
          return mergeFrom((com.impinj.stp.StpApi.TIDTableEntry)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TIDTableEntry other) {
        if (other == com.impinj.stp.StpApi.TIDTableEntry.getDefaultInstance()) return this;
        if (other.hasTID()) {
          setTID(other.getTID());
        }
        if (other.hasEPCMemory()) {
          mergeEPCMemory(other.getEPCMemory());
        }
        if (other.hasTIDMemory()) {
          mergeTIDMemory(other.getTIDMemory());
        }
        if (other.hasUserMemory()) {
          mergeUserMemory(other.getUserMemory());
        }
        if (other.hasSecurePassword()) {
          mergeSecurePassword(other.getSecurePassword());
        }
        if (other.hasAccessPassword()) {
          mergeAccessPassword(other.getAccessPassword());
        }
        if (other.hasKillPassword()) {
          mergeKillPassword(other.getKillPassword());
        }
        if (other.hasLockConfig()) {
          mergeLockConfig(other.getLockConfig());
        }
        if (other.hasBlockpermalockConfig()) {
          mergeBlockpermalockConfig(other.getBlockpermalockConfig());
        }
        if (other.hasKillTag()) {
          setKillTag(other.getKillTag());
        }
        if (other.hasVoidTag()) {
          setVoidTag(other.getVoidTag());
        }
        if (other.hasMonzaR6PFeatureConfig()) {
          mergeMonzaR6PFeatureConfig(other.getMonzaR6PFeatureConfig());
        }
        if (other.hasMonzaS6CFeatureConfig()) {
          mergeMonzaS6CFeatureConfig(other.getMonzaS6CFeatureConfig());
        }
        if (other.hasMonzaR6FeatureConfig()) {
          mergeMonzaR6FeatureConfig(other.getMonzaR6FeatureConfig());
        }
        if (other.hasMonzaR6AFeatureConfig()) {
          mergeMonzaR6AFeatureConfig(other.getMonzaR6AFeatureConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasTID()) {
          
          return false;
        }
        if (hasEPCMemory()) {
          if (!getEPCMemory().isInitialized()) {
            
            return false;
          }
        }
        if (hasTIDMemory()) {
          if (!getTIDMemory().isInitialized()) {
            
            return false;
          }
        }
        if (hasSecurePassword()) {
          if (!getSecurePassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasAccessPassword()) {
          if (!getAccessPassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasKillPassword()) {
          if (!getKillPassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasLockConfig()) {
          if (!getLockConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasBlockpermalockConfig()) {
          if (!getBlockpermalockConfig().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TIDTableEntry parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TIDTableEntry) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required bytes TID = 1;
      private com.google.protobuf.ByteString tID_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * The TID of the tag for these encoding actions to be
       * performed  on.
       */
      public boolean hasTID() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * The TID of the tag for these encoding actions to be
       * performed  on.
       */
      public com.google.protobuf.ByteString getTID() {
        return tID_;
      }
      /**
       *
       * The TID of the tag for these encoding actions to be
       * performed  on.
       */
      public Builder setTID(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tID_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The TID of the tag for these encoding actions to be
       * performed  on.
       */
      public Builder clearTID() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tID_ = getDefaultInstance().getTID();
        onChanged();
        return this;
      }

      // optional .Impinj.STP.EPCMemory EPC_memory = 3;
      private com.impinj.stp.StpApi.EPCMemory ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder> ePCMemoryBuilder_;
      /**
       *
       * 2 DEPRECATED
       */
      public boolean hasEPCMemory() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * 2 DEPRECATED
       */
      public com.impinj.stp.StpApi.EPCMemory getEPCMemory() {
        if (ePCMemoryBuilder_ == null) {
          return ePCMemory_;
        } else {
          return ePCMemoryBuilder_.getMessage();
        }
      }
      /**
       *
       * 2 DEPRECATED
       */
      public Builder setEPCMemory(com.impinj.stp.StpApi.EPCMemory value) {
        if (ePCMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ePCMemory_ = value;
          onChanged();
        } else {
          ePCMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * 2 DEPRECATED
       */
      public Builder setEPCMemory(
          com.impinj.stp.StpApi.EPCMemory.Builder builderForValue) {
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = builderForValue.build();
          onChanged();
        } else {
          ePCMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * 2 DEPRECATED
       */
      public Builder mergeEPCMemory(com.impinj.stp.StpApi.EPCMemory value) {
        if (ePCMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              ePCMemory_ != com.impinj.stp.StpApi.EPCMemory.getDefaultInstance()) {
            ePCMemory_ =
              com.impinj.stp.StpApi.EPCMemory.newBuilder(ePCMemory_).mergeFrom(value).buildPartial();
          } else {
            ePCMemory_ = value;
          }
          onChanged();
        } else {
          ePCMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * 2 DEPRECATED
       */
      public Builder clearEPCMemory() {
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
          onChanged();
        } else {
          ePCMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       *
       * 2 DEPRECATED
       */
      public com.impinj.stp.StpApi.EPCMemory.Builder getEPCMemoryBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getEPCMemoryFieldBuilder().getBuilder();
      }
      /**
       *
       * 2 DEPRECATED
       */
      public com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder() {
        if (ePCMemoryBuilder_ != null) {
          return ePCMemoryBuilder_.getMessageOrBuilder();
        } else {
          return ePCMemory_;
        }
      }
      /**
       *
       * 2 DEPRECATED
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder> 
          getEPCMemoryFieldBuilder() {
        if (ePCMemoryBuilder_ == null) {
          ePCMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder>(
                  ePCMemory_,
                  getParentForChildren(),
                  isClean());
          ePCMemory_ = null;
        }
        return ePCMemoryBuilder_;
      }

      // optional .Impinj.STP.TIDMemory TID_memory = 4;
      private com.impinj.stp.StpApi.TIDMemory tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder> tIDMemoryBuilder_;
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public boolean hasTIDMemory() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public com.impinj.stp.StpApi.TIDMemory getTIDMemory() {
        if (tIDMemoryBuilder_ == null) {
          return tIDMemory_;
        } else {
          return tIDMemoryBuilder_.getMessage();
        }
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public Builder setTIDMemory(com.impinj.stp.StpApi.TIDMemory value) {
        if (tIDMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tIDMemory_ = value;
          onChanged();
        } else {
          tIDMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public Builder setTIDMemory(
          com.impinj.stp.StpApi.TIDMemory.Builder builderForValue) {
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = builderForValue.build();
          onChanged();
        } else {
          tIDMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public Builder mergeTIDMemory(com.impinj.stp.StpApi.TIDMemory value) {
        if (tIDMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              tIDMemory_ != com.impinj.stp.StpApi.TIDMemory.getDefaultInstance()) {
            tIDMemory_ =
              com.impinj.stp.StpApi.TIDMemory.newBuilder(tIDMemory_).mergeFrom(value).buildPartial();
          } else {
            tIDMemory_ = value;
          }
          onChanged();
        } else {
          tIDMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public Builder clearTIDMemory() {
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
          onChanged();
        } else {
          tIDMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public com.impinj.stp.StpApi.TIDMemory.Builder getTIDMemoryBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getTIDMemoryFieldBuilder().getBuilder();
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      public com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder() {
        if (tIDMemoryBuilder_ != null) {
          return tIDMemoryBuilder_.getMessageOrBuilder();
        } else {
          return tIDMemory_;
        }
      }
      /**
       *
       * This is the TID memory to write.  In tags such as Monza4QT
       * or UCodeX, there is writable memory in the TID memory bank
       * after the read-only unique serialized TID bits.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder> 
          getTIDMemoryFieldBuilder() {
        if (tIDMemoryBuilder_ == null) {
          tIDMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder>(
                  tIDMemory_,
                  getParentForChildren(),
                  isClean());
          tIDMemory_ = null;
        }
        return tIDMemoryBuilder_;
      }

      // optional .Impinj.STP.UserMemory user_memory = 5;
      private com.impinj.stp.StpApi.UserMemory userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> userMemoryBuilder_;
      /**
       */
      public boolean hasUserMemory() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory getUserMemory() {
        if (userMemoryBuilder_ == null) {
          return userMemory_;
        } else {
          return userMemoryBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          userMemory_ = value;
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setUserMemory(
          com.impinj.stp.StpApi.UserMemory.Builder builderForValue) {
        if (userMemoryBuilder_ == null) {
          userMemory_ = builderForValue.build();
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              userMemory_ != com.impinj.stp.StpApi.UserMemory.getDefaultInstance()) {
            userMemory_ =
              com.impinj.stp.StpApi.UserMemory.newBuilder(userMemory_).mergeFrom(value).buildPartial();
          } else {
            userMemory_ = value;
          }
          onChanged();
        } else {
          userMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearUserMemory() {
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
          onChanged();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory.Builder getUserMemoryBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getUserMemoryFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
        if (userMemoryBuilder_ != null) {
          return userMemoryBuilder_.getMessageOrBuilder();
        } else {
          return userMemory_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> 
          getUserMemoryFieldBuilder() {
        if (userMemoryBuilder_ == null) {
          userMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder>(
                  userMemory_,
                  getParentForChildren(),
                  isClean());
          userMemory_ = null;
        }
        return userMemoryBuilder_;
      }

      // optional .Impinj.STP.Password secure_password = 6;
      private com.impinj.stp.StpApi.Password securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> securePasswordBuilder_;
      /**
       */
      public boolean hasSecurePassword() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getSecurePassword() {
        if (securePasswordBuilder_ == null) {
          return securePassword_;
        } else {
          return securePasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSecurePassword(com.impinj.stp.StpApi.Password value) {
        if (securePasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          securePassword_ = value;
          onChanged();
        } else {
          securePasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder setSecurePassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (securePasswordBuilder_ == null) {
          securePassword_ = builderForValue.build();
          onChanged();
        } else {
          securePasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder mergeSecurePassword(com.impinj.stp.StpApi.Password value) {
        if (securePasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              securePassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            securePassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(securePassword_).mergeFrom(value).buildPartial();
          } else {
            securePassword_ = value;
          }
          onChanged();
        } else {
          securePasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder clearSecurePassword() {
        if (securePasswordBuilder_ == null) {
          securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          securePasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getSecurePasswordBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getSecurePasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder() {
        if (securePasswordBuilder_ != null) {
          return securePasswordBuilder_.getMessageOrBuilder();
        } else {
          return securePassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getSecurePasswordFieldBuilder() {
        if (securePasswordBuilder_ == null) {
          securePasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  securePassword_,
                  getParentForChildren(),
                  isClean());
          securePassword_ = null;
        }
        return securePasswordBuilder_;
      }

      // optional .Impinj.STP.Password access_password = 7;
      private com.impinj.stp.StpApi.Password accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> accessPasswordBuilder_;
      /**
       */
      public boolean hasAccessPassword() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getAccessPassword() {
        if (accessPasswordBuilder_ == null) {
          return accessPassword_;
        } else {
          return accessPasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAccessPassword(com.impinj.stp.StpApi.Password value) {
        if (accessPasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          accessPassword_ = value;
          onChanged();
        } else {
          accessPasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setAccessPassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = builderForValue.build();
          onChanged();
        } else {
          accessPasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeAccessPassword(com.impinj.stp.StpApi.Password value) {
        if (accessPasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              accessPassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            accessPassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(accessPassword_).mergeFrom(value).buildPartial();
          } else {
            accessPassword_ = value;
          }
          onChanged();
        } else {
          accessPasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearAccessPassword() {
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          accessPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getAccessPasswordBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getAccessPasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder() {
        if (accessPasswordBuilder_ != null) {
          return accessPasswordBuilder_.getMessageOrBuilder();
        } else {
          return accessPassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getAccessPasswordFieldBuilder() {
        if (accessPasswordBuilder_ == null) {
          accessPasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  accessPassword_,
                  getParentForChildren(),
                  isClean());
          accessPassword_ = null;
        }
        return accessPasswordBuilder_;
      }

      // optional .Impinj.STP.Password kill_password = 8;
      private com.impinj.stp.StpApi.Password killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> killPasswordBuilder_;
      /**
       */
      public boolean hasKillPassword() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getKillPassword() {
        if (killPasswordBuilder_ == null) {
          return killPassword_;
        } else {
          return killPasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setKillPassword(com.impinj.stp.StpApi.Password value) {
        if (killPasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          killPassword_ = value;
          onChanged();
        } else {
          killPasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder setKillPassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (killPasswordBuilder_ == null) {
          killPassword_ = builderForValue.build();
          onChanged();
        } else {
          killPasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder mergeKillPassword(com.impinj.stp.StpApi.Password value) {
        if (killPasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              killPassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            killPassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(killPassword_).mergeFrom(value).buildPartial();
          } else {
            killPassword_ = value;
          }
          onChanged();
        } else {
          killPasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder clearKillPassword() {
        if (killPasswordBuilder_ == null) {
          killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          killPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getKillPasswordBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getKillPasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder() {
        if (killPasswordBuilder_ != null) {
          return killPasswordBuilder_.getMessageOrBuilder();
        } else {
          return killPassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getKillPasswordFieldBuilder() {
        if (killPasswordBuilder_ == null) {
          killPasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  killPassword_,
                  getParentForChildren(),
                  isClean());
          killPassword_ = null;
        }
        return killPasswordBuilder_;
      }

      // optional .Impinj.STP.LockConfig lock_config = 9;
      private com.impinj.stp.StpApi.LockConfig lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder> lockConfigBuilder_;
      /**
       */
      public boolean hasLockConfig() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfig getLockConfig() {
        if (lockConfigBuilder_ == null) {
          return lockConfig_;
        } else {
          return lockConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setLockConfig(com.impinj.stp.StpApi.LockConfig value) {
        if (lockConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          lockConfig_ = value;
          onChanged();
        } else {
          lockConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder setLockConfig(
          com.impinj.stp.StpApi.LockConfig.Builder builderForValue) {
        if (lockConfigBuilder_ == null) {
          lockConfig_ = builderForValue.build();
          onChanged();
        } else {
          lockConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder mergeLockConfig(com.impinj.stp.StpApi.LockConfig value) {
        if (lockConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              lockConfig_ != com.impinj.stp.StpApi.LockConfig.getDefaultInstance()) {
            lockConfig_ =
              com.impinj.stp.StpApi.LockConfig.newBuilder(lockConfig_).mergeFrom(value).buildPartial();
          } else {
            lockConfig_ = value;
          }
          onChanged();
        } else {
          lockConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder clearLockConfig() {
        if (lockConfigBuilder_ == null) {
          lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
          onChanged();
        } else {
          lockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfig.Builder getLockConfigBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getLockConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder() {
        if (lockConfigBuilder_ != null) {
          return lockConfigBuilder_.getMessageOrBuilder();
        } else {
          return lockConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder> 
          getLockConfigFieldBuilder() {
        if (lockConfigBuilder_ == null) {
          lockConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder>(
                  lockConfig_,
                  getParentForChildren(),
                  isClean());
          lockConfig_ = null;
        }
        return lockConfigBuilder_;
      }

      // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 10;
      private com.impinj.stp.StpApi.BlockPermalockConfig blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder> blockpermalockConfigBuilder_;
      /**
       *
       * NOT YET SUPPORTED
       */
      public boolean hasBlockpermalockConfig() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig() {
        if (blockpermalockConfigBuilder_ == null) {
          return blockpermalockConfig_;
        } else {
          return blockpermalockConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder setBlockpermalockConfig(com.impinj.stp.StpApi.BlockPermalockConfig value) {
        if (blockpermalockConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          blockpermalockConfig_ = value;
          onChanged();
        } else {
          blockpermalockConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder setBlockpermalockConfig(
          com.impinj.stp.StpApi.BlockPermalockConfig.Builder builderForValue) {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = builderForValue.build();
          onChanged();
        } else {
          blockpermalockConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder mergeBlockpermalockConfig(com.impinj.stp.StpApi.BlockPermalockConfig value) {
        if (blockpermalockConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              blockpermalockConfig_ != com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance()) {
            blockpermalockConfig_ =
              com.impinj.stp.StpApi.BlockPermalockConfig.newBuilder(blockpermalockConfig_).mergeFrom(value).buildPartial();
          } else {
            blockpermalockConfig_ = value;
          }
          onChanged();
        } else {
          blockpermalockConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder clearBlockpermalockConfig() {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
          onChanged();
        } else {
          blockpermalockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfig.Builder getBlockpermalockConfigBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getBlockpermalockConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder() {
        if (blockpermalockConfigBuilder_ != null) {
          return blockpermalockConfigBuilder_.getMessageOrBuilder();
        } else {
          return blockpermalockConfig_;
        }
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder> 
          getBlockpermalockConfigFieldBuilder() {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder>(
                  blockpermalockConfig_,
                  getParentForChildren(),
                  isClean());
          blockpermalockConfig_ = null;
        }
        return blockpermalockConfigBuilder_;
      }

      // optional bool kill_tag = 12;
      private boolean killTag_ ;
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 11;
       */
      public boolean hasKillTag() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 11;
       */
      public boolean getKillTag() {
        return killTag_;
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 11;
       */
      public Builder setKillTag(boolean value) {
        bitField0_ |= 0x00000200;
        killTag_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 11;
       */
      public Builder clearKillTag() {
        bitField0_ = (bitField0_ & ~0x00000200);
        killTag_ = false;
        onChanged();
        return this;
      }

      // optional bool void_tag = 13;
      private boolean voidTag_ ;
      /**
       */
      public boolean hasVoidTag() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       */
      public boolean getVoidTag() {
        return voidTag_;
      }
      /**
       */
      public Builder setVoidTag(boolean value) {
        bitField0_ |= 0x00000400;
        voidTag_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearVoidTag() {
        bitField0_ = (bitField0_ & ~0x00000400);
        voidTag_ = false;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 14;
      private com.impinj.stp.StpApi.MonzaR6PFeatureConfig monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder> monzaR6PFeatureConfigBuilder_;
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6PFeatureConfig() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          return monzaR6PFeatureConfig_;
        } else {
          return monzaR6PFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6PFeatureConfig(com.impinj.stp.StpApi.MonzaR6PFeatureConfig value) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6PFeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6PFeatureConfig(
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder builderForValue) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6PFeatureConfig(com.impinj.stp.StpApi.MonzaR6PFeatureConfig value) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              monzaR6PFeatureConfig_ != com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance()) {
            monzaR6PFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig.newBuilder(monzaR6PFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6PFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6PFeatureConfig() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder getMonzaR6PFeatureConfigBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getMonzaR6PFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder() {
        if (monzaR6PFeatureConfigBuilder_ != null) {
          return monzaR6PFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6PFeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder> 
          getMonzaR6PFeatureConfigFieldBuilder() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder>(
                  monzaR6PFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6PFeatureConfig_ = null;
        }
        return monzaR6PFeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 15;
      private com.impinj.stp.StpApi.MonzaS6CFeatureConfig monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder> monzaS6CFeatureConfigBuilder_;
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaS6CFeatureConfig() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          return monzaS6CFeatureConfig_;
        } else {
          return monzaS6CFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaS6CFeatureConfig(com.impinj.stp.StpApi.MonzaS6CFeatureConfig value) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaS6CFeatureConfig_ = value;
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaS6CFeatureConfig(
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder builderForValue) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaS6CFeatureConfig(com.impinj.stp.StpApi.MonzaS6CFeatureConfig value) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000) &&
              monzaS6CFeatureConfig_ != com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance()) {
            monzaS6CFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig.newBuilder(monzaS6CFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaS6CFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaS6CFeatureConfig() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder getMonzaS6CFeatureConfigBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getMonzaS6CFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder() {
        if (monzaS6CFeatureConfigBuilder_ != null) {
          return monzaS6CFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaS6CFeatureConfig_;
        }
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder> 
          getMonzaS6CFeatureConfigFieldBuilder() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder>(
                  monzaS6CFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaS6CFeatureConfig_ = null;
        }
        return monzaS6CFeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 16;
      private com.impinj.stp.StpApi.MonzaR6FeatureConfig monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder> monzaR6FeatureConfigBuilder_;
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6FeatureConfig() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          return monzaR6FeatureConfig_;
        } else {
          return monzaR6FeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6FeatureConfig(com.impinj.stp.StpApi.MonzaR6FeatureConfig value) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6FeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6FeatureConfig(
          com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder builderForValue) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6FeatureConfig(com.impinj.stp.StpApi.MonzaR6FeatureConfig value) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000) &&
              monzaR6FeatureConfig_ != com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance()) {
            monzaR6FeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6FeatureConfig.newBuilder(monzaR6FeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6FeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6FeatureConfig() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder getMonzaR6FeatureConfigBuilder() {
        bitField0_ |= 0x00002000;
        onChanged();
        return getMonzaR6FeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder() {
        if (monzaR6FeatureConfigBuilder_ != null) {
          return monzaR6FeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6FeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder> 
          getMonzaR6FeatureConfigFieldBuilder() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder>(
                  monzaR6FeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6FeatureConfig_ = null;
        }
        return monzaR6FeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 17;
      private com.impinj.stp.StpApi.MonzaR6AFeatureConfig monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder> monzaR6AFeatureConfigBuilder_;
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6AFeatureConfig() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          return monzaR6AFeatureConfig_;
        } else {
          return monzaR6AFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6AFeatureConfig(com.impinj.stp.StpApi.MonzaR6AFeatureConfig value) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6AFeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6AFeatureConfig(
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder builderForValue) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6AFeatureConfig(com.impinj.stp.StpApi.MonzaR6AFeatureConfig value) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000) &&
              monzaR6AFeatureConfig_ != com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance()) {
            monzaR6AFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig.newBuilder(monzaR6AFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6AFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6AFeatureConfig() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder getMonzaR6AFeatureConfigBuilder() {
        bitField0_ |= 0x00004000;
        onChanged();
        return getMonzaR6AFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder() {
        if (monzaR6AFeatureConfigBuilder_ != null) {
          return monzaR6AFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6AFeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder> 
          getMonzaR6AFeatureConfigFieldBuilder() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder>(
                  monzaR6AFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6AFeatureConfig_ = null;
        }
        return monzaR6AFeatureConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TIDTableEntry)
    }

    static {
      defaultInstance = new TIDTableEntry(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TIDTableEntry)
  }

  public interface TIDTableEntriesOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .Impinj.STP.TIDTableEntry tid_table_entries = 1;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.TIDTableEntry> 
        getTidTableEntriesList();
    /**
     */
    com.impinj.stp.StpApi.TIDTableEntry getTidTableEntries(int index);
    /**
     */
    int getTidTableEntriesCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
        getTidTableEntriesOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.TIDTableEntryOrBuilder getTidTableEntriesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code Impinj.STP.TIDTableEntries}
   *
   * A list of tag operations to perform.
   */
  public static final class TIDTableEntries extends
      com.google.protobuf.GeneratedMessage
      implements TIDTableEntriesOrBuilder {
    // Use TIDTableEntries.newBuilder() to construct.
    private TIDTableEntries(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TIDTableEntries(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TIDTableEntries defaultInstance;
    public static TIDTableEntries getDefaultInstance() {
      return defaultInstance;
    }

    public TIDTableEntries getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TIDTableEntries(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                tidTableEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.TIDTableEntry>();
                mutable_bitField0_ |= 0x00000001;
              }
              tidTableEntries_.add(input.readMessage(com.impinj.stp.StpApi.TIDTableEntry.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          tidTableEntries_ = java.util.Collections.unmodifiableList(tidTableEntries_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntries_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntries_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TIDTableEntries.class, com.impinj.stp.StpApi.TIDTableEntries.Builder.class);
    }

    public static com.google.protobuf.Parser<TIDTableEntries> PARSER =
        new com.google.protobuf.AbstractParser<TIDTableEntries>() {
      public TIDTableEntries parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TIDTableEntries(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TIDTableEntries> getParserForType() {
      return PARSER;
    }

    // repeated .Impinj.STP.TIDTableEntry tid_table_entries = 1;
    public static final int TID_TABLE_ENTRIES_FIELD_NUMBER = 1;
    private java.util.List<com.impinj.stp.StpApi.TIDTableEntry> tidTableEntries_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.TIDTableEntry> getTidTableEntriesList() {
      return tidTableEntries_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
        getTidTableEntriesOrBuilderList() {
      return tidTableEntries_;
    }
    /**
     */
    public int getTidTableEntriesCount() {
      return tidTableEntries_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDTableEntry getTidTableEntries(int index) {
      return tidTableEntries_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDTableEntryOrBuilder getTidTableEntriesOrBuilder(
        int index) {
      return tidTableEntries_.get(index);
    }

    private void initFields() {
      tidTableEntries_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      for (int i = 0; i < getTidTableEntriesCount(); i++) {
        if (!getTidTableEntries(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < tidTableEntries_.size(); i++) {
        output.writeMessage(1, tidTableEntries_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < tidTableEntries_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, tidTableEntries_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TIDTableEntries parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TIDTableEntries prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TIDTableEntries}
     *
     * A list of tag operations to perform.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TIDTableEntriesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntries_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntries_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TIDTableEntries.class, com.impinj.stp.StpApi.TIDTableEntries.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TIDTableEntries.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTidTableEntriesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (tidTableEntriesBuilder_ == null) {
          tidTableEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          tidTableEntriesBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TIDTableEntries_descriptor;
      }

      public com.impinj.stp.StpApi.TIDTableEntries getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TIDTableEntries.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TIDTableEntries build() {
        com.impinj.stp.StpApi.TIDTableEntries result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TIDTableEntries buildPartial() {
        com.impinj.stp.StpApi.TIDTableEntries result = new com.impinj.stp.StpApi.TIDTableEntries(this);
        int from_bitField0_ = bitField0_;
        if (tidTableEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            tidTableEntries_ = java.util.Collections.unmodifiableList(tidTableEntries_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.tidTableEntries_ = tidTableEntries_;
        } else {
          result.tidTableEntries_ = tidTableEntriesBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TIDTableEntries) {
          return mergeFrom((com.impinj.stp.StpApi.TIDTableEntries)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TIDTableEntries other) {
        if (other == com.impinj.stp.StpApi.TIDTableEntries.getDefaultInstance()) return this;
        if (tidTableEntriesBuilder_ == null) {
          if (!other.tidTableEntries_.isEmpty()) {
            if (tidTableEntries_.isEmpty()) {
              tidTableEntries_ = other.tidTableEntries_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureTidTableEntriesIsMutable();
              tidTableEntries_.addAll(other.tidTableEntries_);
            }
            onChanged();
          }
        } else {
          if (!other.tidTableEntries_.isEmpty()) {
            if (tidTableEntriesBuilder_.isEmpty()) {
              tidTableEntriesBuilder_.dispose();
              tidTableEntriesBuilder_ = null;
              tidTableEntries_ = other.tidTableEntries_;
              bitField0_ = (bitField0_ & ~0x00000001);
              tidTableEntriesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTidTableEntriesFieldBuilder() : null;
            } else {
              tidTableEntriesBuilder_.addAllMessages(other.tidTableEntries_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getTidTableEntriesCount(); i++) {
          if (!getTidTableEntries(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TIDTableEntries parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TIDTableEntries) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .Impinj.STP.TIDTableEntry tid_table_entries = 1;
      private java.util.List<com.impinj.stp.StpApi.TIDTableEntry> tidTableEntries_ =
        java.util.Collections.emptyList();
      private void ensureTidTableEntriesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          tidTableEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.TIDTableEntry>(tidTableEntries_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.TIDTableEntry, com.impinj.stp.StpApi.TIDTableEntry.Builder, com.impinj.stp.StpApi.TIDTableEntryOrBuilder> tidTableEntriesBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.TIDTableEntry> getTidTableEntriesList() {
        if (tidTableEntriesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tidTableEntries_);
        } else {
          return tidTableEntriesBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getTidTableEntriesCount() {
        if (tidTableEntriesBuilder_ == null) {
          return tidTableEntries_.size();
        } else {
          return tidTableEntriesBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry getTidTableEntries(int index) {
        if (tidTableEntriesBuilder_ == null) {
          return tidTableEntries_.get(index);
        } else {
          return tidTableEntriesBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setTidTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry value) {
        if (tidTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTidTableEntriesIsMutable();
          tidTableEntries_.set(index, value);
          onChanged();
        } else {
          tidTableEntriesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setTidTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry.Builder builderForValue) {
        if (tidTableEntriesBuilder_ == null) {
          ensureTidTableEntriesIsMutable();
          tidTableEntries_.set(index, builderForValue.build());
          onChanged();
        } else {
          tidTableEntriesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTidTableEntries(com.impinj.stp.StpApi.TIDTableEntry value) {
        if (tidTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTidTableEntriesIsMutable();
          tidTableEntries_.add(value);
          onChanged();
        } else {
          tidTableEntriesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addTidTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry value) {
        if (tidTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTidTableEntriesIsMutable();
          tidTableEntries_.add(index, value);
          onChanged();
        } else {
          tidTableEntriesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addTidTableEntries(
          com.impinj.stp.StpApi.TIDTableEntry.Builder builderForValue) {
        if (tidTableEntriesBuilder_ == null) {
          ensureTidTableEntriesIsMutable();
          tidTableEntries_.add(builderForValue.build());
          onChanged();
        } else {
          tidTableEntriesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTidTableEntries(
          int index, com.impinj.stp.StpApi.TIDTableEntry.Builder builderForValue) {
        if (tidTableEntriesBuilder_ == null) {
          ensureTidTableEntriesIsMutable();
          tidTableEntries_.add(index, builderForValue.build());
          onChanged();
        } else {
          tidTableEntriesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllTidTableEntries(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.TIDTableEntry> values) {
        if (tidTableEntriesBuilder_ == null) {
          ensureTidTableEntriesIsMutable();
          super.addAll(values, tidTableEntries_);
          onChanged();
        } else {
          tidTableEntriesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearTidTableEntries() {
        if (tidTableEntriesBuilder_ == null) {
          tidTableEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          tidTableEntriesBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeTidTableEntries(int index) {
        if (tidTableEntriesBuilder_ == null) {
          ensureTidTableEntriesIsMutable();
          tidTableEntries_.remove(index);
          onChanged();
        } else {
          tidTableEntriesBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry.Builder getTidTableEntriesBuilder(
          int index) {
        return getTidTableEntriesFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntryOrBuilder getTidTableEntriesOrBuilder(
          int index) {
        if (tidTableEntriesBuilder_ == null) {
          return tidTableEntries_.get(index);  } else {
          return tidTableEntriesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
           getTidTableEntriesOrBuilderList() {
        if (tidTableEntriesBuilder_ != null) {
          return tidTableEntriesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tidTableEntries_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry.Builder addTidTableEntriesBuilder() {
        return getTidTableEntriesFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.TIDTableEntry.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntry.Builder addTidTableEntriesBuilder(
          int index) {
        return getTidTableEntriesFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.TIDTableEntry.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.TIDTableEntry.Builder> 
           getTidTableEntriesBuilderList() {
        return getTidTableEntriesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.TIDTableEntry, com.impinj.stp.StpApi.TIDTableEntry.Builder, com.impinj.stp.StpApi.TIDTableEntryOrBuilder> 
          getTidTableEntriesFieldBuilder() {
        if (tidTableEntriesBuilder_ == null) {
          tidTableEntriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.TIDTableEntry, com.impinj.stp.StpApi.TIDTableEntry.Builder, com.impinj.stp.StpApi.TIDTableEntryOrBuilder>(
                  tidTableEntries_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          tidTableEntries_ = null;
        }
        return tidTableEntriesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TIDTableEntries)
    }

    static {
      defaultInstance = new TIDTableEntries(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TIDTableEntries)
  }

  public interface OrderedListEntryOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.EPCMemory EPC_memory = 1;
    /**
     */
    boolean hasEPCMemory();
    /**
     */
    com.impinj.stp.StpApi.EPCMemory getEPCMemory();
    /**
     */
    com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder();

    // optional .Impinj.STP.UserMemory user_memory = 2;
    /**
     */
    boolean hasUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemory getUserMemory();
    /**
     */
    com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder();

    // optional .Impinj.STP.Password secure_password = 3;
    /**
     */
    boolean hasSecurePassword();
    /**
     */
    com.impinj.stp.StpApi.Password getSecurePassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder();

    // optional .Impinj.STP.Password access_password = 4;
    /**
     */
    boolean hasAccessPassword();
    /**
     */
    com.impinj.stp.StpApi.Password getAccessPassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder();

    // optional .Impinj.STP.Password kill_password = 5;
    /**
     */
    boolean hasKillPassword();
    /**
     */
    com.impinj.stp.StpApi.Password getKillPassword();
    /**
     */
    com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder();

    // optional .Impinj.STP.LockConfig lock_config = 6;
    /**
     */
    boolean hasLockConfig();
    /**
     */
    com.impinj.stp.StpApi.LockConfig getLockConfig();
    /**
     */
    com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder();

    // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 7;
    /**
     *
     * NOT YET SUPPORTED
     */
    boolean hasBlockpermalockConfig();
    /**
     *
     * NOT YET SUPPORTED
     */
    com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig();
    /**
     *
     * NOT YET SUPPORTED
     */
    com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder();

    // optional .Impinj.STP.TIDMemory TID_memory = 8;
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 9;
     */
    boolean hasTIDMemory();
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 9;
     */
    com.impinj.stp.StpApi.TIDMemory getTIDMemory();
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 9;
     */
    com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder();

    // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 10;
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6PFeatureConfig();
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig();
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 11;
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaS6CFeatureConfig();
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig();
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 12;
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6FeatureConfig();
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig();
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder();

    // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 13;
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    boolean hasMonzaR6AFeatureConfig();
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig();
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.OrderedListEntry}
   */
  public static final class OrderedListEntry extends
      com.google.protobuf.GeneratedMessage
      implements OrderedListEntryOrBuilder {
    // Use OrderedListEntry.newBuilder() to construct.
    private OrderedListEntry(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OrderedListEntry(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OrderedListEntry defaultInstance;
    public static OrderedListEntry getDefaultInstance() {
      return defaultInstance;
    }

    public OrderedListEntry getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OrderedListEntry(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.EPCMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = ePCMemory_.toBuilder();
              }
              ePCMemory_ = input.readMessage(com.impinj.stp.StpApi.EPCMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ePCMemory_);
                ePCMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.UserMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = userMemory_.toBuilder();
              }
              userMemory_ = input.readMessage(com.impinj.stp.StpApi.UserMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(userMemory_);
                userMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = securePassword_.toBuilder();
              }
              securePassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(securePassword_);
                securePassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = accessPassword_.toBuilder();
              }
              accessPassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(accessPassword_);
                accessPassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.Password.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = killPassword_.toBuilder();
              }
              killPassword_ = input.readMessage(com.impinj.stp.StpApi.Password.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(killPassword_);
                killPassword_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.LockConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = lockConfig_.toBuilder();
              }
              lockConfig_ = input.readMessage(com.impinj.stp.StpApi.LockConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(lockConfig_);
                lockConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 58: {
              com.impinj.stp.StpApi.BlockPermalockConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = blockpermalockConfig_.toBuilder();
              }
              blockpermalockConfig_ = input.readMessage(com.impinj.stp.StpApi.BlockPermalockConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(blockpermalockConfig_);
                blockpermalockConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 66: {
              com.impinj.stp.StpApi.TIDMemory.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = tIDMemory_.toBuilder();
              }
              tIDMemory_ = input.readMessage(com.impinj.stp.StpApi.TIDMemory.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tIDMemory_);
                tIDMemory_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 82: {
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = monzaR6PFeatureConfig_.toBuilder();
              }
              monzaR6PFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6PFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6PFeatureConfig_);
                monzaR6PFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 90: {
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = monzaS6CFeatureConfig_.toBuilder();
              }
              monzaS6CFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaS6CFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaS6CFeatureConfig_);
                monzaS6CFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 98: {
              com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = monzaR6FeatureConfig_.toBuilder();
              }
              monzaR6FeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6FeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6FeatureConfig_);
                monzaR6FeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 106: {
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) == 0x00000800)) {
                subBuilder = monzaR6AFeatureConfig_.toBuilder();
              }
              monzaR6AFeatureConfig_ = input.readMessage(com.impinj.stp.StpApi.MonzaR6AFeatureConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(monzaR6AFeatureConfig_);
                monzaR6AFeatureConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntry_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntry_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OrderedListEntry.class, com.impinj.stp.StpApi.OrderedListEntry.Builder.class);
    }

    public static com.google.protobuf.Parser<OrderedListEntry> PARSER =
        new com.google.protobuf.AbstractParser<OrderedListEntry>() {
      public OrderedListEntry parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OrderedListEntry(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OrderedListEntry> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.EPCMemory EPC_memory = 1;
    public static final int EPC_MEMORY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.EPCMemory ePCMemory_;
    /**
     */
    public boolean hasEPCMemory() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.EPCMemory getEPCMemory() {
      return ePCMemory_;
    }
    /**
     */
    public com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder() {
      return ePCMemory_;
    }

    // optional .Impinj.STP.UserMemory user_memory = 2;
    public static final int USER_MEMORY_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.UserMemory userMemory_;
    /**
     */
    public boolean hasUserMemory() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemory getUserMemory() {
      return userMemory_;
    }
    /**
     */
    public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
      return userMemory_;
    }

    // optional .Impinj.STP.Password secure_password = 3;
    public static final int SECURE_PASSWORD_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.Password securePassword_;
    /**
     */
    public boolean hasSecurePassword() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getSecurePassword() {
      return securePassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder() {
      return securePassword_;
    }

    // optional .Impinj.STP.Password access_password = 4;
    public static final int ACCESS_PASSWORD_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.Password accessPassword_;
    /**
     */
    public boolean hasAccessPassword() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getAccessPassword() {
      return accessPassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder() {
      return accessPassword_;
    }

    // optional .Impinj.STP.Password kill_password = 5;
    public static final int KILL_PASSWORD_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.Password killPassword_;
    /**
     */
    public boolean hasKillPassword() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public com.impinj.stp.StpApi.Password getKillPassword() {
      return killPassword_;
    }
    /**
     */
    public com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder() {
      return killPassword_;
    }

    // optional .Impinj.STP.LockConfig lock_config = 6;
    public static final int LOCK_CONFIG_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.LockConfig lockConfig_;
    /**
     */
    public boolean hasLockConfig() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.impinj.stp.StpApi.LockConfig getLockConfig() {
      return lockConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder() {
      return lockConfig_;
    }

    // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 7;
    public static final int BLOCKPERMALOCK_CONFIG_FIELD_NUMBER = 7;
    private com.impinj.stp.StpApi.BlockPermalockConfig blockpermalockConfig_;
    /**
     *
     * NOT YET SUPPORTED
     */
    public boolean hasBlockpermalockConfig() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     *
     * NOT YET SUPPORTED
     */
    public com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig() {
      return blockpermalockConfig_;
    }
    /**
     *
     * NOT YET SUPPORTED
     */
    public com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder() {
      return blockpermalockConfig_;
    }

    // optional .Impinj.STP.TIDMemory TID_memory = 8;
    public static final int TID_MEMORY_FIELD_NUMBER = 8;
    private com.impinj.stp.StpApi.TIDMemory tIDMemory_;
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 9;
     */
    public boolean hasTIDMemory() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 9;
     */
    public com.impinj.stp.StpApi.TIDMemory getTIDMemory() {
      return tIDMemory_;
    }
    /**
     *
     * optional    MonzaQT                         monza_QT
     * = 9;
     */
    public com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder() {
      return tIDMemory_;
    }

    // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 10;
    public static final int MONZA_R6P_FEATURE_CONFIG_FIELD_NUMBER = 10;
    private com.impinj.stp.StpApi.MonzaR6PFeatureConfig monzaR6PFeatureConfig_;
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6PFeatureConfig() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig() {
      return monzaR6PFeatureConfig_;
    }
    /**
     *
     * MonzaR6PFeatureConfig will only be acted upon when encoding
     * a Monza R6P tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder() {
      return monzaR6PFeatureConfig_;
    }

    // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 11;
    public static final int MONZA_S6C_FEATURE_CONFIG_FIELD_NUMBER = 11;
    private com.impinj.stp.StpApi.MonzaS6CFeatureConfig monzaS6CFeatureConfig_;
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaS6CFeatureConfig() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig() {
      return monzaS6CFeatureConfig_;
    }
    /**
     *
     * MonzaS6CFeatureConfig will only be acted upon when encoding
     * a Monza S6C tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder() {
      return monzaS6CFeatureConfig_;
    }

    // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 12;
    public static final int MONZA_R6_FEATURE_CONFIG_FIELD_NUMBER = 12;
    private com.impinj.stp.StpApi.MonzaR6FeatureConfig monzaR6FeatureConfig_;
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6FeatureConfig() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig() {
      return monzaR6FeatureConfig_;
    }
    /**
     *
     * MonzaR6FeatureConfig will only be acted upon when encoding a
     * Monza R6 tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder() {
      return monzaR6FeatureConfig_;
    }

    // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 13;
    public static final int MONZA_R6A_FEATURE_CONFIG_FIELD_NUMBER = 13;
    private com.impinj.stp.StpApi.MonzaR6AFeatureConfig monzaR6AFeatureConfig_;
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public boolean hasMonzaR6AFeatureConfig() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig() {
      return monzaR6AFeatureConfig_;
    }
    /**
     *
     * MonzaR6AFeatureConfig will only be acted upon when encoding
     * a Monza R6A tag. Will be ignored for all other tag types.
     */
    public com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder() {
      return monzaR6AFeatureConfig_;
    }

    private void initFields() {
      ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
      userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
      blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
      tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
      monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
      monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
      monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
      monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasEPCMemory()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getEPCMemory().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasSecurePassword()) {
        if (!getSecurePassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAccessPassword()) {
        if (!getAccessPassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasKillPassword()) {
        if (!getKillPassword().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasLockConfig()) {
        if (!getLockConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasBlockpermalockConfig()) {
        if (!getBlockpermalockConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasTIDMemory()) {
        if (!getTIDMemory().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, ePCMemory_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, userMemory_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, securePassword_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, accessPassword_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, killPassword_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, lockConfig_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, blockpermalockConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, tIDMemory_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(10, monzaR6PFeatureConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(11, monzaS6CFeatureConfig_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(12, monzaR6FeatureConfig_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeMessage(13, monzaR6AFeatureConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, ePCMemory_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, userMemory_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, securePassword_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, accessPassword_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, killPassword_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, lockConfig_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, blockpermalockConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, tIDMemory_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, monzaR6PFeatureConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, monzaS6CFeatureConfig_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, monzaR6FeatureConfig_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, monzaR6AFeatureConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OrderedListEntry parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OrderedListEntry prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OrderedListEntry}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OrderedListEntryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntry_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntry_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OrderedListEntry.class, com.impinj.stp.StpApi.OrderedListEntry.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OrderedListEntry.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEPCMemoryFieldBuilder();
          getUserMemoryFieldBuilder();
          getSecurePasswordFieldBuilder();
          getAccessPasswordFieldBuilder();
          getKillPasswordFieldBuilder();
          getLockConfigFieldBuilder();
          getBlockpermalockConfigFieldBuilder();
          getTIDMemoryFieldBuilder();
          getMonzaR6PFeatureConfigFieldBuilder();
          getMonzaS6CFeatureConfigFieldBuilder();
          getMonzaR6FeatureConfigFieldBuilder();
          getMonzaR6AFeatureConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
        } else {
          ePCMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (securePasswordBuilder_ == null) {
          securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          securePasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          accessPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (killPasswordBuilder_ == null) {
          killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
        } else {
          killPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (lockConfigBuilder_ == null) {
          lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
        } else {
          lockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
        } else {
          blockpermalockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
        } else {
          tIDMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
        } else {
          monzaR6PFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
        } else {
          monzaS6CFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
        } else {
          monzaR6FeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
        } else {
          monzaR6AFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntry_descriptor;
      }

      public com.impinj.stp.StpApi.OrderedListEntry getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OrderedListEntry.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OrderedListEntry build() {
        com.impinj.stp.StpApi.OrderedListEntry result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OrderedListEntry buildPartial() {
        com.impinj.stp.StpApi.OrderedListEntry result = new com.impinj.stp.StpApi.OrderedListEntry(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (ePCMemoryBuilder_ == null) {
          result.ePCMemory_ = ePCMemory_;
        } else {
          result.ePCMemory_ = ePCMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (userMemoryBuilder_ == null) {
          result.userMemory_ = userMemory_;
        } else {
          result.userMemory_ = userMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (securePasswordBuilder_ == null) {
          result.securePassword_ = securePassword_;
        } else {
          result.securePassword_ = securePasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (accessPasswordBuilder_ == null) {
          result.accessPassword_ = accessPassword_;
        } else {
          result.accessPassword_ = accessPasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (killPasswordBuilder_ == null) {
          result.killPassword_ = killPassword_;
        } else {
          result.killPassword_ = killPasswordBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (lockConfigBuilder_ == null) {
          result.lockConfig_ = lockConfig_;
        } else {
          result.lockConfig_ = lockConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (blockpermalockConfigBuilder_ == null) {
          result.blockpermalockConfig_ = blockpermalockConfig_;
        } else {
          result.blockpermalockConfig_ = blockpermalockConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (tIDMemoryBuilder_ == null) {
          result.tIDMemory_ = tIDMemory_;
        } else {
          result.tIDMemory_ = tIDMemoryBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (monzaR6PFeatureConfigBuilder_ == null) {
          result.monzaR6PFeatureConfig_ = monzaR6PFeatureConfig_;
        } else {
          result.monzaR6PFeatureConfig_ = monzaR6PFeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (monzaS6CFeatureConfigBuilder_ == null) {
          result.monzaS6CFeatureConfig_ = monzaS6CFeatureConfig_;
        } else {
          result.monzaS6CFeatureConfig_ = monzaS6CFeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (monzaR6FeatureConfigBuilder_ == null) {
          result.monzaR6FeatureConfig_ = monzaR6FeatureConfig_;
        } else {
          result.monzaR6FeatureConfig_ = monzaR6FeatureConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        if (monzaR6AFeatureConfigBuilder_ == null) {
          result.monzaR6AFeatureConfig_ = monzaR6AFeatureConfig_;
        } else {
          result.monzaR6AFeatureConfig_ = monzaR6AFeatureConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OrderedListEntry) {
          return mergeFrom((com.impinj.stp.StpApi.OrderedListEntry)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OrderedListEntry other) {
        if (other == com.impinj.stp.StpApi.OrderedListEntry.getDefaultInstance()) return this;
        if (other.hasEPCMemory()) {
          mergeEPCMemory(other.getEPCMemory());
        }
        if (other.hasUserMemory()) {
          mergeUserMemory(other.getUserMemory());
        }
        if (other.hasSecurePassword()) {
          mergeSecurePassword(other.getSecurePassword());
        }
        if (other.hasAccessPassword()) {
          mergeAccessPassword(other.getAccessPassword());
        }
        if (other.hasKillPassword()) {
          mergeKillPassword(other.getKillPassword());
        }
        if (other.hasLockConfig()) {
          mergeLockConfig(other.getLockConfig());
        }
        if (other.hasBlockpermalockConfig()) {
          mergeBlockpermalockConfig(other.getBlockpermalockConfig());
        }
        if (other.hasTIDMemory()) {
          mergeTIDMemory(other.getTIDMemory());
        }
        if (other.hasMonzaR6PFeatureConfig()) {
          mergeMonzaR6PFeatureConfig(other.getMonzaR6PFeatureConfig());
        }
        if (other.hasMonzaS6CFeatureConfig()) {
          mergeMonzaS6CFeatureConfig(other.getMonzaS6CFeatureConfig());
        }
        if (other.hasMonzaR6FeatureConfig()) {
          mergeMonzaR6FeatureConfig(other.getMonzaR6FeatureConfig());
        }
        if (other.hasMonzaR6AFeatureConfig()) {
          mergeMonzaR6AFeatureConfig(other.getMonzaR6AFeatureConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasEPCMemory()) {
          
          return false;
        }
        if (!getEPCMemory().isInitialized()) {
          
          return false;
        }
        if (hasSecurePassword()) {
          if (!getSecurePassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasAccessPassword()) {
          if (!getAccessPassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasKillPassword()) {
          if (!getKillPassword().isInitialized()) {
            
            return false;
          }
        }
        if (hasLockConfig()) {
          if (!getLockConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasBlockpermalockConfig()) {
          if (!getBlockpermalockConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasTIDMemory()) {
          if (!getTIDMemory().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OrderedListEntry parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OrderedListEntry) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.EPCMemory EPC_memory = 1;
      private com.impinj.stp.StpApi.EPCMemory ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder> ePCMemoryBuilder_;
      /**
       */
      public boolean hasEPCMemory() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.EPCMemory getEPCMemory() {
        if (ePCMemoryBuilder_ == null) {
          return ePCMemory_;
        } else {
          return ePCMemoryBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setEPCMemory(com.impinj.stp.StpApi.EPCMemory value) {
        if (ePCMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ePCMemory_ = value;
          onChanged();
        } else {
          ePCMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setEPCMemory(
          com.impinj.stp.StpApi.EPCMemory.Builder builderForValue) {
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = builderForValue.build();
          onChanged();
        } else {
          ePCMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeEPCMemory(com.impinj.stp.StpApi.EPCMemory value) {
        if (ePCMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              ePCMemory_ != com.impinj.stp.StpApi.EPCMemory.getDefaultInstance()) {
            ePCMemory_ =
              com.impinj.stp.StpApi.EPCMemory.newBuilder(ePCMemory_).mergeFrom(value).buildPartial();
          } else {
            ePCMemory_ = value;
          }
          onChanged();
        } else {
          ePCMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearEPCMemory() {
        if (ePCMemoryBuilder_ == null) {
          ePCMemory_ = com.impinj.stp.StpApi.EPCMemory.getDefaultInstance();
          onChanged();
        } else {
          ePCMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.EPCMemory.Builder getEPCMemoryBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getEPCMemoryFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.EPCMemoryOrBuilder getEPCMemoryOrBuilder() {
        if (ePCMemoryBuilder_ != null) {
          return ePCMemoryBuilder_.getMessageOrBuilder();
        } else {
          return ePCMemory_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder> 
          getEPCMemoryFieldBuilder() {
        if (ePCMemoryBuilder_ == null) {
          ePCMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.EPCMemory, com.impinj.stp.StpApi.EPCMemory.Builder, com.impinj.stp.StpApi.EPCMemoryOrBuilder>(
                  ePCMemory_,
                  getParentForChildren(),
                  isClean());
          ePCMemory_ = null;
        }
        return ePCMemoryBuilder_;
      }

      // optional .Impinj.STP.UserMemory user_memory = 2;
      private com.impinj.stp.StpApi.UserMemory userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> userMemoryBuilder_;
      /**
       */
      public boolean hasUserMemory() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory getUserMemory() {
        if (userMemoryBuilder_ == null) {
          return userMemory_;
        } else {
          return userMemoryBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          userMemory_ = value;
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setUserMemory(
          com.impinj.stp.StpApi.UserMemory.Builder builderForValue) {
        if (userMemoryBuilder_ == null) {
          userMemory_ = builderForValue.build();
          onChanged();
        } else {
          userMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeUserMemory(com.impinj.stp.StpApi.UserMemory value) {
        if (userMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              userMemory_ != com.impinj.stp.StpApi.UserMemory.getDefaultInstance()) {
            userMemory_ =
              com.impinj.stp.StpApi.UserMemory.newBuilder(userMemory_).mergeFrom(value).buildPartial();
          } else {
            userMemory_ = value;
          }
          onChanged();
        } else {
          userMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearUserMemory() {
        if (userMemoryBuilder_ == null) {
          userMemory_ = com.impinj.stp.StpApi.UserMemory.getDefaultInstance();
          onChanged();
        } else {
          userMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemory.Builder getUserMemoryBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getUserMemoryFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.UserMemoryOrBuilder getUserMemoryOrBuilder() {
        if (userMemoryBuilder_ != null) {
          return userMemoryBuilder_.getMessageOrBuilder();
        } else {
          return userMemory_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder> 
          getUserMemoryFieldBuilder() {
        if (userMemoryBuilder_ == null) {
          userMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.UserMemory, com.impinj.stp.StpApi.UserMemory.Builder, com.impinj.stp.StpApi.UserMemoryOrBuilder>(
                  userMemory_,
                  getParentForChildren(),
                  isClean());
          userMemory_ = null;
        }
        return userMemoryBuilder_;
      }

      // optional .Impinj.STP.Password secure_password = 3;
      private com.impinj.stp.StpApi.Password securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> securePasswordBuilder_;
      /**
       */
      public boolean hasSecurePassword() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getSecurePassword() {
        if (securePasswordBuilder_ == null) {
          return securePassword_;
        } else {
          return securePasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSecurePassword(com.impinj.stp.StpApi.Password value) {
        if (securePasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          securePassword_ = value;
          onChanged();
        } else {
          securePasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder setSecurePassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (securePasswordBuilder_ == null) {
          securePassword_ = builderForValue.build();
          onChanged();
        } else {
          securePasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder mergeSecurePassword(com.impinj.stp.StpApi.Password value) {
        if (securePasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              securePassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            securePassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(securePassword_).mergeFrom(value).buildPartial();
          } else {
            securePassword_ = value;
          }
          onChanged();
        } else {
          securePasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder clearSecurePassword() {
        if (securePasswordBuilder_ == null) {
          securePassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          securePasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getSecurePasswordBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getSecurePasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getSecurePasswordOrBuilder() {
        if (securePasswordBuilder_ != null) {
          return securePasswordBuilder_.getMessageOrBuilder();
        } else {
          return securePassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getSecurePasswordFieldBuilder() {
        if (securePasswordBuilder_ == null) {
          securePasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  securePassword_,
                  getParentForChildren(),
                  isClean());
          securePassword_ = null;
        }
        return securePasswordBuilder_;
      }

      // optional .Impinj.STP.Password access_password = 4;
      private com.impinj.stp.StpApi.Password accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> accessPasswordBuilder_;
      /**
       */
      public boolean hasAccessPassword() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getAccessPassword() {
        if (accessPasswordBuilder_ == null) {
          return accessPassword_;
        } else {
          return accessPasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAccessPassword(com.impinj.stp.StpApi.Password value) {
        if (accessPasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          accessPassword_ = value;
          onChanged();
        } else {
          accessPasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setAccessPassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = builderForValue.build();
          onChanged();
        } else {
          accessPasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeAccessPassword(com.impinj.stp.StpApi.Password value) {
        if (accessPasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              accessPassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            accessPassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(accessPassword_).mergeFrom(value).buildPartial();
          } else {
            accessPassword_ = value;
          }
          onChanged();
        } else {
          accessPasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearAccessPassword() {
        if (accessPasswordBuilder_ == null) {
          accessPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          accessPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getAccessPasswordBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getAccessPasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getAccessPasswordOrBuilder() {
        if (accessPasswordBuilder_ != null) {
          return accessPasswordBuilder_.getMessageOrBuilder();
        } else {
          return accessPassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getAccessPasswordFieldBuilder() {
        if (accessPasswordBuilder_ == null) {
          accessPasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  accessPassword_,
                  getParentForChildren(),
                  isClean());
          accessPassword_ = null;
        }
        return accessPasswordBuilder_;
      }

      // optional .Impinj.STP.Password kill_password = 5;
      private com.impinj.stp.StpApi.Password killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> killPasswordBuilder_;
      /**
       */
      public boolean hasKillPassword() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public com.impinj.stp.StpApi.Password getKillPassword() {
        if (killPasswordBuilder_ == null) {
          return killPassword_;
        } else {
          return killPasswordBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setKillPassword(com.impinj.stp.StpApi.Password value) {
        if (killPasswordBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          killPassword_ = value;
          onChanged();
        } else {
          killPasswordBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder setKillPassword(
          com.impinj.stp.StpApi.Password.Builder builderForValue) {
        if (killPasswordBuilder_ == null) {
          killPassword_ = builderForValue.build();
          onChanged();
        } else {
          killPasswordBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder mergeKillPassword(com.impinj.stp.StpApi.Password value) {
        if (killPasswordBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              killPassword_ != com.impinj.stp.StpApi.Password.getDefaultInstance()) {
            killPassword_ =
              com.impinj.stp.StpApi.Password.newBuilder(killPassword_).mergeFrom(value).buildPartial();
          } else {
            killPassword_ = value;
          }
          onChanged();
        } else {
          killPasswordBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder clearKillPassword() {
        if (killPasswordBuilder_ == null) {
          killPassword_ = com.impinj.stp.StpApi.Password.getDefaultInstance();
          onChanged();
        } else {
          killPasswordBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Password.Builder getKillPasswordBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getKillPasswordFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.PasswordOrBuilder getKillPasswordOrBuilder() {
        if (killPasswordBuilder_ != null) {
          return killPasswordBuilder_.getMessageOrBuilder();
        } else {
          return killPassword_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder> 
          getKillPasswordFieldBuilder() {
        if (killPasswordBuilder_ == null) {
          killPasswordBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Password, com.impinj.stp.StpApi.Password.Builder, com.impinj.stp.StpApi.PasswordOrBuilder>(
                  killPassword_,
                  getParentForChildren(),
                  isClean());
          killPassword_ = null;
        }
        return killPasswordBuilder_;
      }

      // optional .Impinj.STP.LockConfig lock_config = 6;
      private com.impinj.stp.StpApi.LockConfig lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder> lockConfigBuilder_;
      /**
       */
      public boolean hasLockConfig() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfig getLockConfig() {
        if (lockConfigBuilder_ == null) {
          return lockConfig_;
        } else {
          return lockConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setLockConfig(com.impinj.stp.StpApi.LockConfig value) {
        if (lockConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          lockConfig_ = value;
          onChanged();
        } else {
          lockConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setLockConfig(
          com.impinj.stp.StpApi.LockConfig.Builder builderForValue) {
        if (lockConfigBuilder_ == null) {
          lockConfig_ = builderForValue.build();
          onChanged();
        } else {
          lockConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeLockConfig(com.impinj.stp.StpApi.LockConfig value) {
        if (lockConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              lockConfig_ != com.impinj.stp.StpApi.LockConfig.getDefaultInstance()) {
            lockConfig_ =
              com.impinj.stp.StpApi.LockConfig.newBuilder(lockConfig_).mergeFrom(value).buildPartial();
          } else {
            lockConfig_ = value;
          }
          onChanged();
        } else {
          lockConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearLockConfig() {
        if (lockConfigBuilder_ == null) {
          lockConfig_ = com.impinj.stp.StpApi.LockConfig.getDefaultInstance();
          onChanged();
        } else {
          lockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfig.Builder getLockConfigBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getLockConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.LockConfigOrBuilder getLockConfigOrBuilder() {
        if (lockConfigBuilder_ != null) {
          return lockConfigBuilder_.getMessageOrBuilder();
        } else {
          return lockConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder> 
          getLockConfigFieldBuilder() {
        if (lockConfigBuilder_ == null) {
          lockConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.LockConfig, com.impinj.stp.StpApi.LockConfig.Builder, com.impinj.stp.StpApi.LockConfigOrBuilder>(
                  lockConfig_,
                  getParentForChildren(),
                  isClean());
          lockConfig_ = null;
        }
        return lockConfigBuilder_;
      }

      // optional .Impinj.STP.BlockPermalockConfig blockpermalock_config = 7;
      private com.impinj.stp.StpApi.BlockPermalockConfig blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder> blockpermalockConfigBuilder_;
      /**
       *
       * NOT YET SUPPORTED
       */
      public boolean hasBlockpermalockConfig() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfig getBlockpermalockConfig() {
        if (blockpermalockConfigBuilder_ == null) {
          return blockpermalockConfig_;
        } else {
          return blockpermalockConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder setBlockpermalockConfig(com.impinj.stp.StpApi.BlockPermalockConfig value) {
        if (blockpermalockConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          blockpermalockConfig_ = value;
          onChanged();
        } else {
          blockpermalockConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder setBlockpermalockConfig(
          com.impinj.stp.StpApi.BlockPermalockConfig.Builder builderForValue) {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = builderForValue.build();
          onChanged();
        } else {
          blockpermalockConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder mergeBlockpermalockConfig(com.impinj.stp.StpApi.BlockPermalockConfig value) {
        if (blockpermalockConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              blockpermalockConfig_ != com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance()) {
            blockpermalockConfig_ =
              com.impinj.stp.StpApi.BlockPermalockConfig.newBuilder(blockpermalockConfig_).mergeFrom(value).buildPartial();
          } else {
            blockpermalockConfig_ = value;
          }
          onChanged();
        } else {
          blockpermalockConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public Builder clearBlockpermalockConfig() {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfig_ = com.impinj.stp.StpApi.BlockPermalockConfig.getDefaultInstance();
          onChanged();
        } else {
          blockpermalockConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfig.Builder getBlockpermalockConfigBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getBlockpermalockConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      public com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder getBlockpermalockConfigOrBuilder() {
        if (blockpermalockConfigBuilder_ != null) {
          return blockpermalockConfigBuilder_.getMessageOrBuilder();
        } else {
          return blockpermalockConfig_;
        }
      }
      /**
       *
       * NOT YET SUPPORTED
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder> 
          getBlockpermalockConfigFieldBuilder() {
        if (blockpermalockConfigBuilder_ == null) {
          blockpermalockConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.BlockPermalockConfig, com.impinj.stp.StpApi.BlockPermalockConfig.Builder, com.impinj.stp.StpApi.BlockPermalockConfigOrBuilder>(
                  blockpermalockConfig_,
                  getParentForChildren(),
                  isClean());
          blockpermalockConfig_ = null;
        }
        return blockpermalockConfigBuilder_;
      }

      // optional .Impinj.STP.TIDMemory TID_memory = 8;
      private com.impinj.stp.StpApi.TIDMemory tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder> tIDMemoryBuilder_;
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public boolean hasTIDMemory() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public com.impinj.stp.StpApi.TIDMemory getTIDMemory() {
        if (tIDMemoryBuilder_ == null) {
          return tIDMemory_;
        } else {
          return tIDMemoryBuilder_.getMessage();
        }
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public Builder setTIDMemory(com.impinj.stp.StpApi.TIDMemory value) {
        if (tIDMemoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tIDMemory_ = value;
          onChanged();
        } else {
          tIDMemoryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public Builder setTIDMemory(
          com.impinj.stp.StpApi.TIDMemory.Builder builderForValue) {
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = builderForValue.build();
          onChanged();
        } else {
          tIDMemoryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public Builder mergeTIDMemory(com.impinj.stp.StpApi.TIDMemory value) {
        if (tIDMemoryBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              tIDMemory_ != com.impinj.stp.StpApi.TIDMemory.getDefaultInstance()) {
            tIDMemory_ =
              com.impinj.stp.StpApi.TIDMemory.newBuilder(tIDMemory_).mergeFrom(value).buildPartial();
          } else {
            tIDMemory_ = value;
          }
          onChanged();
        } else {
          tIDMemoryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public Builder clearTIDMemory() {
        if (tIDMemoryBuilder_ == null) {
          tIDMemory_ = com.impinj.stp.StpApi.TIDMemory.getDefaultInstance();
          onChanged();
        } else {
          tIDMemoryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public com.impinj.stp.StpApi.TIDMemory.Builder getTIDMemoryBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getTIDMemoryFieldBuilder().getBuilder();
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      public com.impinj.stp.StpApi.TIDMemoryOrBuilder getTIDMemoryOrBuilder() {
        if (tIDMemoryBuilder_ != null) {
          return tIDMemoryBuilder_.getMessageOrBuilder();
        } else {
          return tIDMemory_;
        }
      }
      /**
       *
       * optional    MonzaQT                         monza_QT
       * = 9;
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder> 
          getTIDMemoryFieldBuilder() {
        if (tIDMemoryBuilder_ == null) {
          tIDMemoryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TIDMemory, com.impinj.stp.StpApi.TIDMemory.Builder, com.impinj.stp.StpApi.TIDMemoryOrBuilder>(
                  tIDMemory_,
                  getParentForChildren(),
                  isClean());
          tIDMemory_ = null;
        }
        return tIDMemoryBuilder_;
      }

      // optional .Impinj.STP.MonzaR6PFeatureConfig monza_r6p_feature_config = 10;
      private com.impinj.stp.StpApi.MonzaR6PFeatureConfig monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder> monzaR6PFeatureConfigBuilder_;
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6PFeatureConfig() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig getMonzaR6PFeatureConfig() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          return monzaR6PFeatureConfig_;
        } else {
          return monzaR6PFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6PFeatureConfig(com.impinj.stp.StpApi.MonzaR6PFeatureConfig value) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6PFeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6PFeatureConfig(
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder builderForValue) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6PFeatureConfig(com.impinj.stp.StpApi.MonzaR6PFeatureConfig value) {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              monzaR6PFeatureConfig_ != com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance()) {
            monzaR6PFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig.newBuilder(monzaR6PFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6PFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6PFeatureConfig() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6PFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6PFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder getMonzaR6PFeatureConfigBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getMonzaR6PFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder getMonzaR6PFeatureConfigOrBuilder() {
        if (monzaR6PFeatureConfigBuilder_ != null) {
          return monzaR6PFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6PFeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6PFeatureConfig will only be acted upon when encoding
       * a Monza R6P tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder> 
          getMonzaR6PFeatureConfigFieldBuilder() {
        if (monzaR6PFeatureConfigBuilder_ == null) {
          monzaR6PFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6PFeatureConfig, com.impinj.stp.StpApi.MonzaR6PFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6PFeatureConfigOrBuilder>(
                  monzaR6PFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6PFeatureConfig_ = null;
        }
        return monzaR6PFeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaS6CFeatureConfig monza_s6c_feature_config = 11;
      private com.impinj.stp.StpApi.MonzaS6CFeatureConfig monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder> monzaS6CFeatureConfigBuilder_;
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaS6CFeatureConfig() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig getMonzaS6CFeatureConfig() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          return monzaS6CFeatureConfig_;
        } else {
          return monzaS6CFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaS6CFeatureConfig(com.impinj.stp.StpApi.MonzaS6CFeatureConfig value) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaS6CFeatureConfig_ = value;
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaS6CFeatureConfig(
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder builderForValue) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaS6CFeatureConfig(com.impinj.stp.StpApi.MonzaS6CFeatureConfig value) {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              monzaS6CFeatureConfig_ != com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance()) {
            monzaS6CFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig.newBuilder(monzaS6CFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaS6CFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaS6CFeatureConfig() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfig_ = com.impinj.stp.StpApi.MonzaS6CFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaS6CFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder getMonzaS6CFeatureConfigBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getMonzaS6CFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder getMonzaS6CFeatureConfigOrBuilder() {
        if (monzaS6CFeatureConfigBuilder_ != null) {
          return monzaS6CFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaS6CFeatureConfig_;
        }
      }
      /**
       *
       * MonzaS6CFeatureConfig will only be acted upon when encoding
       * a Monza S6C tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder> 
          getMonzaS6CFeatureConfigFieldBuilder() {
        if (monzaS6CFeatureConfigBuilder_ == null) {
          monzaS6CFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaS6CFeatureConfig, com.impinj.stp.StpApi.MonzaS6CFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaS6CFeatureConfigOrBuilder>(
                  monzaS6CFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaS6CFeatureConfig_ = null;
        }
        return monzaS6CFeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaR6FeatureConfig monza_r6_feature_config = 12;
      private com.impinj.stp.StpApi.MonzaR6FeatureConfig monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder> monzaR6FeatureConfigBuilder_;
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6FeatureConfig() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfig getMonzaR6FeatureConfig() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          return monzaR6FeatureConfig_;
        } else {
          return monzaR6FeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6FeatureConfig(com.impinj.stp.StpApi.MonzaR6FeatureConfig value) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6FeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6FeatureConfig(
          com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder builderForValue) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6FeatureConfig(com.impinj.stp.StpApi.MonzaR6FeatureConfig value) {
        if (monzaR6FeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              monzaR6FeatureConfig_ != com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance()) {
            monzaR6FeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6FeatureConfig.newBuilder(monzaR6FeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6FeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6FeatureConfig() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfig_ = com.impinj.stp.StpApi.MonzaR6FeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6FeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder getMonzaR6FeatureConfigBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getMonzaR6FeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder getMonzaR6FeatureConfigOrBuilder() {
        if (monzaR6FeatureConfigBuilder_ != null) {
          return monzaR6FeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6FeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6FeatureConfig will only be acted upon when encoding a
       * Monza R6 tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder> 
          getMonzaR6FeatureConfigFieldBuilder() {
        if (monzaR6FeatureConfigBuilder_ == null) {
          monzaR6FeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6FeatureConfig, com.impinj.stp.StpApi.MonzaR6FeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6FeatureConfigOrBuilder>(
                  monzaR6FeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6FeatureConfig_ = null;
        }
        return monzaR6FeatureConfigBuilder_;
      }

      // optional .Impinj.STP.MonzaR6AFeatureConfig monza_r6a_feature_config = 13;
      private com.impinj.stp.StpApi.MonzaR6AFeatureConfig monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder> monzaR6AFeatureConfigBuilder_;
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public boolean hasMonzaR6AFeatureConfig() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig getMonzaR6AFeatureConfig() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          return monzaR6AFeatureConfig_;
        } else {
          return monzaR6AFeatureConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6AFeatureConfig(com.impinj.stp.StpApi.MonzaR6AFeatureConfig value) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          monzaR6AFeatureConfig_ = value;
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder setMonzaR6AFeatureConfig(
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder builderForValue) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = builderForValue.build();
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder mergeMonzaR6AFeatureConfig(com.impinj.stp.StpApi.MonzaR6AFeatureConfig value) {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              monzaR6AFeatureConfig_ != com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance()) {
            monzaR6AFeatureConfig_ =
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig.newBuilder(monzaR6AFeatureConfig_).mergeFrom(value).buildPartial();
          } else {
            monzaR6AFeatureConfig_ = value;
          }
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public Builder clearMonzaR6AFeatureConfig() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfig_ = com.impinj.stp.StpApi.MonzaR6AFeatureConfig.getDefaultInstance();
          onChanged();
        } else {
          monzaR6AFeatureConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder getMonzaR6AFeatureConfigBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getMonzaR6AFeatureConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      public com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder getMonzaR6AFeatureConfigOrBuilder() {
        if (monzaR6AFeatureConfigBuilder_ != null) {
          return monzaR6AFeatureConfigBuilder_.getMessageOrBuilder();
        } else {
          return monzaR6AFeatureConfig_;
        }
      }
      /**
       *
       * MonzaR6AFeatureConfig will only be acted upon when encoding
       * a Monza R6A tag. Will be ignored for all other tag types.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder> 
          getMonzaR6AFeatureConfigFieldBuilder() {
        if (monzaR6AFeatureConfigBuilder_ == null) {
          monzaR6AFeatureConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.MonzaR6AFeatureConfig, com.impinj.stp.StpApi.MonzaR6AFeatureConfig.Builder, com.impinj.stp.StpApi.MonzaR6AFeatureConfigOrBuilder>(
                  monzaR6AFeatureConfig_,
                  getParentForChildren(),
                  isClean());
          monzaR6AFeatureConfig_ = null;
        }
        return monzaR6AFeatureConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OrderedListEntry)
    }

    static {
      defaultInstance = new OrderedListEntry(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OrderedListEntry)
  }

  public interface OrderedListEntriesOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .Impinj.STP.OrderedListEntry ordered_list_entries = 1;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.OrderedListEntry> 
        getOrderedListEntriesList();
    /**
     */
    com.impinj.stp.StpApi.OrderedListEntry getOrderedListEntries(int index);
    /**
     */
    int getOrderedListEntriesCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
        getOrderedListEntriesOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.OrderedListEntryOrBuilder getOrderedListEntriesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code Impinj.STP.OrderedListEntries}
   */
  public static final class OrderedListEntries extends
      com.google.protobuf.GeneratedMessage
      implements OrderedListEntriesOrBuilder {
    // Use OrderedListEntries.newBuilder() to construct.
    private OrderedListEntries(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OrderedListEntries(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OrderedListEntries defaultInstance;
    public static OrderedListEntries getDefaultInstance() {
      return defaultInstance;
    }

    public OrderedListEntries getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OrderedListEntries(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                orderedListEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.OrderedListEntry>();
                mutable_bitField0_ |= 0x00000001;
              }
              orderedListEntries_.add(input.readMessage(com.impinj.stp.StpApi.OrderedListEntry.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          orderedListEntries_ = java.util.Collections.unmodifiableList(orderedListEntries_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntries_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntries_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OrderedListEntries.class, com.impinj.stp.StpApi.OrderedListEntries.Builder.class);
    }

    public static com.google.protobuf.Parser<OrderedListEntries> PARSER =
        new com.google.protobuf.AbstractParser<OrderedListEntries>() {
      public OrderedListEntries parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OrderedListEntries(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OrderedListEntries> getParserForType() {
      return PARSER;
    }

    // repeated .Impinj.STP.OrderedListEntry ordered_list_entries = 1;
    public static final int ORDERED_LIST_ENTRIES_FIELD_NUMBER = 1;
    private java.util.List<com.impinj.stp.StpApi.OrderedListEntry> orderedListEntries_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.OrderedListEntry> getOrderedListEntriesList() {
      return orderedListEntries_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
        getOrderedListEntriesOrBuilderList() {
      return orderedListEntries_;
    }
    /**
     */
    public int getOrderedListEntriesCount() {
      return orderedListEntries_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.OrderedListEntry getOrderedListEntries(int index) {
      return orderedListEntries_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.OrderedListEntryOrBuilder getOrderedListEntriesOrBuilder(
        int index) {
      return orderedListEntries_.get(index);
    }

    private void initFields() {
      orderedListEntries_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      for (int i = 0; i < getOrderedListEntriesCount(); i++) {
        if (!getOrderedListEntries(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < orderedListEntries_.size(); i++) {
        output.writeMessage(1, orderedListEntries_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < orderedListEntries_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, orderedListEntries_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OrderedListEntries parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OrderedListEntries prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OrderedListEntries}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OrderedListEntriesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntries_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntries_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OrderedListEntries.class, com.impinj.stp.StpApi.OrderedListEntries.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OrderedListEntries.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOrderedListEntriesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          orderedListEntriesBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OrderedListEntries_descriptor;
      }

      public com.impinj.stp.StpApi.OrderedListEntries getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OrderedListEntries.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OrderedListEntries build() {
        com.impinj.stp.StpApi.OrderedListEntries result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OrderedListEntries buildPartial() {
        com.impinj.stp.StpApi.OrderedListEntries result = new com.impinj.stp.StpApi.OrderedListEntries(this);
        int from_bitField0_ = bitField0_;
        if (orderedListEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            orderedListEntries_ = java.util.Collections.unmodifiableList(orderedListEntries_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.orderedListEntries_ = orderedListEntries_;
        } else {
          result.orderedListEntries_ = orderedListEntriesBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OrderedListEntries) {
          return mergeFrom((com.impinj.stp.StpApi.OrderedListEntries)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OrderedListEntries other) {
        if (other == com.impinj.stp.StpApi.OrderedListEntries.getDefaultInstance()) return this;
        if (orderedListEntriesBuilder_ == null) {
          if (!other.orderedListEntries_.isEmpty()) {
            if (orderedListEntries_.isEmpty()) {
              orderedListEntries_ = other.orderedListEntries_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureOrderedListEntriesIsMutable();
              orderedListEntries_.addAll(other.orderedListEntries_);
            }
            onChanged();
          }
        } else {
          if (!other.orderedListEntries_.isEmpty()) {
            if (orderedListEntriesBuilder_.isEmpty()) {
              orderedListEntriesBuilder_.dispose();
              orderedListEntriesBuilder_ = null;
              orderedListEntries_ = other.orderedListEntries_;
              bitField0_ = (bitField0_ & ~0x00000001);
              orderedListEntriesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getOrderedListEntriesFieldBuilder() : null;
            } else {
              orderedListEntriesBuilder_.addAllMessages(other.orderedListEntries_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getOrderedListEntriesCount(); i++) {
          if (!getOrderedListEntries(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OrderedListEntries parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OrderedListEntries) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .Impinj.STP.OrderedListEntry ordered_list_entries = 1;
      private java.util.List<com.impinj.stp.StpApi.OrderedListEntry> orderedListEntries_ =
        java.util.Collections.emptyList();
      private void ensureOrderedListEntriesIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          orderedListEntries_ = new java.util.ArrayList<com.impinj.stp.StpApi.OrderedListEntry>(orderedListEntries_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.OrderedListEntry, com.impinj.stp.StpApi.OrderedListEntry.Builder, com.impinj.stp.StpApi.OrderedListEntryOrBuilder> orderedListEntriesBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.OrderedListEntry> getOrderedListEntriesList() {
        if (orderedListEntriesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(orderedListEntries_);
        } else {
          return orderedListEntriesBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getOrderedListEntriesCount() {
        if (orderedListEntriesBuilder_ == null) {
          return orderedListEntries_.size();
        } else {
          return orderedListEntriesBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry getOrderedListEntries(int index) {
        if (orderedListEntriesBuilder_ == null) {
          return orderedListEntries_.get(index);
        } else {
          return orderedListEntriesBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry value) {
        if (orderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.set(index, value);
          onChanged();
        } else {
          orderedListEntriesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry.Builder builderForValue) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.set(index, builderForValue.build());
          onChanged();
        } else {
          orderedListEntriesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(com.impinj.stp.StpApi.OrderedListEntry value) {
        if (orderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(value);
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry value) {
        if (orderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(index, value);
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(
          com.impinj.stp.StpApi.OrderedListEntry.Builder builderForValue) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(builderForValue.build());
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addOrderedListEntries(
          int index, com.impinj.stp.StpApi.OrderedListEntry.Builder builderForValue) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.add(index, builderForValue.build());
          onChanged();
        } else {
          orderedListEntriesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllOrderedListEntries(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.OrderedListEntry> values) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          super.addAll(values, orderedListEntries_);
          onChanged();
        } else {
          orderedListEntriesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearOrderedListEntries() {
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntries_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          orderedListEntriesBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeOrderedListEntries(int index) {
        if (orderedListEntriesBuilder_ == null) {
          ensureOrderedListEntriesIsMutable();
          orderedListEntries_.remove(index);
          onChanged();
        } else {
          orderedListEntriesBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry.Builder getOrderedListEntriesBuilder(
          int index) {
        return getOrderedListEntriesFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntryOrBuilder getOrderedListEntriesOrBuilder(
          int index) {
        if (orderedListEntriesBuilder_ == null) {
          return orderedListEntries_.get(index);  } else {
          return orderedListEntriesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
           getOrderedListEntriesOrBuilderList() {
        if (orderedListEntriesBuilder_ != null) {
          return orderedListEntriesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(orderedListEntries_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry.Builder addOrderedListEntriesBuilder() {
        return getOrderedListEntriesFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.OrderedListEntry.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntry.Builder addOrderedListEntriesBuilder(
          int index) {
        return getOrderedListEntriesFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.OrderedListEntry.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.OrderedListEntry.Builder> 
           getOrderedListEntriesBuilderList() {
        return getOrderedListEntriesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.OrderedListEntry, com.impinj.stp.StpApi.OrderedListEntry.Builder, com.impinj.stp.StpApi.OrderedListEntryOrBuilder> 
          getOrderedListEntriesFieldBuilder() {
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.OrderedListEntry, com.impinj.stp.StpApi.OrderedListEntry.Builder, com.impinj.stp.StpApi.OrderedListEntryOrBuilder>(
                  orderedListEntries_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          orderedListEntries_ = null;
        }
        return orderedListEntriesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OrderedListEntries)
    }

    static {
      defaultInstance = new OrderedListEntries(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OrderedListEntries)
  }

  public interface LowEncodeVolumeEventConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_low_encode_volume_events = 1 [default = true];
    /**
     */
    boolean hasEnableLowEncodeVolumeEvents();
    /**
     */
    boolean getEnableLowEncodeVolumeEvents();

    // optional uint64 monza_threshold = 2 [default = 200000];
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Monza encode volume is low.
     */
    boolean hasMonzaThreshold();
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Monza encode volume is low.
     */
    long getMonzaThreshold();

    // optional uint64 non_monza_threshold = 3 [default = 200000];
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Non Monza encode volume is low.
     */
    boolean hasNonMonzaThreshold();
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Non Monza encode volume is low.
     */
    long getNonMonzaThreshold();

    // optional uint32 monza_reminder_period = 4 [default = 50000];
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Monza encode volume is low. The
     * value is the number of  attempted encodes since last report.
     * Set to 0 to disable reminders.
     */
    boolean hasMonzaReminderPeriod();
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Monza encode volume is low. The
     * value is the number of  attempted encodes since last report.
     * Set to 0 to disable reminders.
     */
    int getMonzaReminderPeriod();

    // optional uint32 non_monza_reminder_period = 5 [default = 50000];
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Non Monza encode volume is low.
     * The value is the number  of attempted encodes since last
     * report. Set to 0 to disable reminders.
     */
    boolean hasNonMonzaReminderPeriod();
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Non Monza encode volume is low.
     * The value is the number  of attempted encodes since last
     * report. Set to 0 to disable reminders.
     */
    int getNonMonzaReminderPeriod();
  }
  /**
   * Protobuf type {@code Impinj.STP.LowEncodeVolumeEventConfig}
   *
   * Configuration of Low Encode Volume Events
   */
  public static final class LowEncodeVolumeEventConfig extends
      com.google.protobuf.GeneratedMessage
      implements LowEncodeVolumeEventConfigOrBuilder {
    // Use LowEncodeVolumeEventConfig.newBuilder() to construct.
    private LowEncodeVolumeEventConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LowEncodeVolumeEventConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LowEncodeVolumeEventConfig defaultInstance;
    public static LowEncodeVolumeEventConfig getDefaultInstance() {
      return defaultInstance;
    }

    public LowEncodeVolumeEventConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LowEncodeVolumeEventConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableLowEncodeVolumeEvents_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              monzaThreshold_ = input.readUInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              nonMonzaThreshold_ = input.readUInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              monzaReminderPeriod_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              nonMonzaReminderPeriod_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEventConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEventConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.class, com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<LowEncodeVolumeEventConfig> PARSER =
        new com.google.protobuf.AbstractParser<LowEncodeVolumeEventConfig>() {
      public LowEncodeVolumeEventConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LowEncodeVolumeEventConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LowEncodeVolumeEventConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_low_encode_volume_events = 1 [default = true];
    public static final int ENABLE_LOW_ENCODE_VOLUME_EVENTS_FIELD_NUMBER = 1;
    private boolean enableLowEncodeVolumeEvents_;
    /**
     */
    public boolean hasEnableLowEncodeVolumeEvents() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getEnableLowEncodeVolumeEvents() {
      return enableLowEncodeVolumeEvents_;
    }

    // optional uint64 monza_threshold = 2 [default = 200000];
    public static final int MONZA_THRESHOLD_FIELD_NUMBER = 2;
    private long monzaThreshold_;
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Monza encode volume is low.
     */
    public boolean hasMonzaThreshold() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Monza encode volume is low.
     */
    public long getMonzaThreshold() {
      return monzaThreshold_;
    }

    // optional uint64 non_monza_threshold = 3 [default = 200000];
    public static final int NON_MONZA_THRESHOLD_FIELD_NUMBER = 3;
    private long nonMonzaThreshold_;
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Non Monza encode volume is low.
     */
    public boolean hasNonMonzaThreshold() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * The threshold at which the device will start sending reports
     * that the remaining Non Monza encode volume is low.
     */
    public long getNonMonzaThreshold() {
      return nonMonzaThreshold_;
    }

    // optional uint32 monza_reminder_period = 4 [default = 50000];
    public static final int MONZA_REMINDER_PERIOD_FIELD_NUMBER = 4;
    private int monzaReminderPeriod_;
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Monza encode volume is low. The
     * value is the number of  attempted encodes since last report.
     * Set to 0 to disable reminders.
     */
    public boolean hasMonzaReminderPeriod() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Monza encode volume is low. The
     * value is the number of  attempted encodes since last report.
     * Set to 0 to disable reminders.
     */
    public int getMonzaReminderPeriod() {
      return monzaReminderPeriod_;
    }

    // optional uint32 non_monza_reminder_period = 5 [default = 50000];
    public static final int NON_MONZA_REMINDER_PERIOD_FIELD_NUMBER = 5;
    private int nonMonzaReminderPeriod_;
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Non Monza encode volume is low.
     * The value is the number  of attempted encodes since last
     * report. Set to 0 to disable reminders.
     */
    public boolean hasNonMonzaReminderPeriod() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * The period at which the the device will send a reminder
     * report  that the remaining Non Monza encode volume is low.
     * The value is the number  of attempted encodes since last
     * report. Set to 0 to disable reminders.
     */
    public int getNonMonzaReminderPeriod() {
      return nonMonzaReminderPeriod_;
    }

    private void initFields() {
      enableLowEncodeVolumeEvents_ = true;
      monzaThreshold_ = 200000L;
      nonMonzaThreshold_ = 200000L;
      monzaReminderPeriod_ = 50000;
      nonMonzaReminderPeriod_ = 50000;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableLowEncodeVolumeEvents_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(2, monzaThreshold_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(3, nonMonzaThreshold_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, monzaReminderPeriod_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt32(5, nonMonzaReminderPeriod_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableLowEncodeVolumeEvents_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, monzaThreshold_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, nonMonzaThreshold_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, monzaReminderPeriod_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, nonMonzaReminderPeriod_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.LowEncodeVolumeEventConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.LowEncodeVolumeEventConfig}
     *
     * Configuration of Low Encode Volume Events
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.LowEncodeVolumeEventConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEventConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEventConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.class, com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableLowEncodeVolumeEvents_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        monzaThreshold_ = 200000L;
        bitField0_ = (bitField0_ & ~0x00000002);
        nonMonzaThreshold_ = 200000L;
        bitField0_ = (bitField0_ & ~0x00000004);
        monzaReminderPeriod_ = 50000;
        bitField0_ = (bitField0_ & ~0x00000008);
        nonMonzaReminderPeriod_ = 50000;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEventConfig_descriptor;
      }

      public com.impinj.stp.StpApi.LowEncodeVolumeEventConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.LowEncodeVolumeEventConfig build() {
        com.impinj.stp.StpApi.LowEncodeVolumeEventConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.LowEncodeVolumeEventConfig buildPartial() {
        com.impinj.stp.StpApi.LowEncodeVolumeEventConfig result = new com.impinj.stp.StpApi.LowEncodeVolumeEventConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableLowEncodeVolumeEvents_ = enableLowEncodeVolumeEvents_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.monzaThreshold_ = monzaThreshold_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.nonMonzaThreshold_ = nonMonzaThreshold_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.monzaReminderPeriod_ = monzaReminderPeriod_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.nonMonzaReminderPeriod_ = nonMonzaReminderPeriod_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.LowEncodeVolumeEventConfig) {
          return mergeFrom((com.impinj.stp.StpApi.LowEncodeVolumeEventConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.LowEncodeVolumeEventConfig other) {
        if (other == com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.getDefaultInstance()) return this;
        if (other.hasEnableLowEncodeVolumeEvents()) {
          setEnableLowEncodeVolumeEvents(other.getEnableLowEncodeVolumeEvents());
        }
        if (other.hasMonzaThreshold()) {
          setMonzaThreshold(other.getMonzaThreshold());
        }
        if (other.hasNonMonzaThreshold()) {
          setNonMonzaThreshold(other.getNonMonzaThreshold());
        }
        if (other.hasMonzaReminderPeriod()) {
          setMonzaReminderPeriod(other.getMonzaReminderPeriod());
        }
        if (other.hasNonMonzaReminderPeriod()) {
          setNonMonzaReminderPeriod(other.getNonMonzaReminderPeriod());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.LowEncodeVolumeEventConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.LowEncodeVolumeEventConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_low_encode_volume_events = 1 [default = true];
      private boolean enableLowEncodeVolumeEvents_ = true;
      /**
       */
      public boolean hasEnableLowEncodeVolumeEvents() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getEnableLowEncodeVolumeEvents() {
        return enableLowEncodeVolumeEvents_;
      }
      /**
       */
      public Builder setEnableLowEncodeVolumeEvents(boolean value) {
        bitField0_ |= 0x00000001;
        enableLowEncodeVolumeEvents_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEnableLowEncodeVolumeEvents() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableLowEncodeVolumeEvents_ = true;
        onChanged();
        return this;
      }

      // optional uint64 monza_threshold = 2 [default = 200000];
      private long monzaThreshold_ = 200000L;
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Monza encode volume is low.
       */
      public boolean hasMonzaThreshold() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Monza encode volume is low.
       */
      public long getMonzaThreshold() {
        return monzaThreshold_;
      }
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Monza encode volume is low.
       */
      public Builder setMonzaThreshold(long value) {
        bitField0_ |= 0x00000002;
        monzaThreshold_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Monza encode volume is low.
       */
      public Builder clearMonzaThreshold() {
        bitField0_ = (bitField0_ & ~0x00000002);
        monzaThreshold_ = 200000L;
        onChanged();
        return this;
      }

      // optional uint64 non_monza_threshold = 3 [default = 200000];
      private long nonMonzaThreshold_ = 200000L;
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Non Monza encode volume is low.
       */
      public boolean hasNonMonzaThreshold() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Non Monza encode volume is low.
       */
      public long getNonMonzaThreshold() {
        return nonMonzaThreshold_;
      }
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Non Monza encode volume is low.
       */
      public Builder setNonMonzaThreshold(long value) {
        bitField0_ |= 0x00000004;
        nonMonzaThreshold_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The threshold at which the device will start sending reports
       * that the remaining Non Monza encode volume is low.
       */
      public Builder clearNonMonzaThreshold() {
        bitField0_ = (bitField0_ & ~0x00000004);
        nonMonzaThreshold_ = 200000L;
        onChanged();
        return this;
      }

      // optional uint32 monza_reminder_period = 4 [default = 50000];
      private int monzaReminderPeriod_ = 50000;
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Monza encode volume is low. The
       * value is the number of  attempted encodes since last report.
       * Set to 0 to disable reminders.
       */
      public boolean hasMonzaReminderPeriod() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Monza encode volume is low. The
       * value is the number of  attempted encodes since last report.
       * Set to 0 to disable reminders.
       */
      public int getMonzaReminderPeriod() {
        return monzaReminderPeriod_;
      }
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Monza encode volume is low. The
       * value is the number of  attempted encodes since last report.
       * Set to 0 to disable reminders.
       */
      public Builder setMonzaReminderPeriod(int value) {
        bitField0_ |= 0x00000008;
        monzaReminderPeriod_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Monza encode volume is low. The
       * value is the number of  attempted encodes since last report.
       * Set to 0 to disable reminders.
       */
      public Builder clearMonzaReminderPeriod() {
        bitField0_ = (bitField0_ & ~0x00000008);
        monzaReminderPeriod_ = 50000;
        onChanged();
        return this;
      }

      // optional uint32 non_monza_reminder_period = 5 [default = 50000];
      private int nonMonzaReminderPeriod_ = 50000;
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Non Monza encode volume is low.
       * The value is the number  of attempted encodes since last
       * report. Set to 0 to disable reminders.
       */
      public boolean hasNonMonzaReminderPeriod() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Non Monza encode volume is low.
       * The value is the number  of attempted encodes since last
       * report. Set to 0 to disable reminders.
       */
      public int getNonMonzaReminderPeriod() {
        return nonMonzaReminderPeriod_;
      }
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Non Monza encode volume is low.
       * The value is the number  of attempted encodes since last
       * report. Set to 0 to disable reminders.
       */
      public Builder setNonMonzaReminderPeriod(int value) {
        bitField0_ |= 0x00000010;
        nonMonzaReminderPeriod_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * The period at which the the device will send a reminder
       * report  that the remaining Non Monza encode volume is low.
       * The value is the number  of attempted encodes since last
       * report. Set to 0 to disable reminders.
       */
      public Builder clearNonMonzaReminderPeriod() {
        bitField0_ = (bitField0_ & ~0x00000010);
        nonMonzaReminderPeriod_ = 50000;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.LowEncodeVolumeEventConfig)
    }

    static {
      defaultInstance = new LowEncodeVolumeEventConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.LowEncodeVolumeEventConfig)
  }

  public interface DeviceEventConfigOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool enable_operation_events = 1 [default = true];
    /**
     */
    boolean hasEnableOperationEvents();
    /**
     */
    boolean getEnableOperationEvents();

    // optional bool enable_GPI_events = 3 [default = false];
    /**
     *
     * optional    bool
     * enable_serialization_job_events     = 2 [default = true];
     */
    boolean hasEnableGPIEvents();
    /**
     *
     * optional    bool
     * enable_serialization_job_events     = 2 [default = true];
     */
    boolean getEnableGPIEvents();

    // optional .Impinj.STP.LowEncodeVolumeEventConfig low_encode_volume_event_config = 6;
    /**
     *
     * optional    bool                    enable_antenna_events
     * = 4 [default = true]; optional    bool
     * enable_device_exception_events      = 5 [default = true];
     */
    boolean hasLowEncodeVolumeEventConfig();
    /**
     *
     * optional    bool                    enable_antenna_events
     * = 4 [default = true]; optional    bool
     * enable_device_exception_events      = 5 [default = true];
     */
    com.impinj.stp.StpApi.LowEncodeVolumeEventConfig getLowEncodeVolumeEventConfig();
    /**
     *
     * optional    bool                    enable_antenna_events
     * = 4 [default = true]; optional    bool
     * enable_device_exception_events      = 5 [default = true];
     */
    com.impinj.stp.StpApi.LowEncodeVolumeEventConfigOrBuilder getLowEncodeVolumeEventConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.DeviceEventConfig}
   *
   * Enable or disable classes of reports.
   */
  public static final class DeviceEventConfig extends
      com.google.protobuf.GeneratedMessage
      implements DeviceEventConfigOrBuilder {
    // Use DeviceEventConfig.newBuilder() to construct.
    private DeviceEventConfig(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeviceEventConfig(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DeviceEventConfig defaultInstance;
    public static DeviceEventConfig getDefaultInstance() {
      return defaultInstance;
    }

    public DeviceEventConfig getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceEventConfig(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enableOperationEvents_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              enableGPIEvents_ = input.readBool();
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = lowEncodeVolumeEventConfig_.toBuilder();
              }
              lowEncodeVolumeEventConfig_ = input.readMessage(com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(lowEncodeVolumeEventConfig_);
                lowEncodeVolumeEventConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventConfig_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventConfig_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.DeviceEventConfig.class, com.impinj.stp.StpApi.DeviceEventConfig.Builder.class);
    }

    public static com.google.protobuf.Parser<DeviceEventConfig> PARSER =
        new com.google.protobuf.AbstractParser<DeviceEventConfig>() {
      public DeviceEventConfig parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeviceEventConfig(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DeviceEventConfig> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool enable_operation_events = 1 [default = true];
    public static final int ENABLE_OPERATION_EVENTS_FIELD_NUMBER = 1;
    private boolean enableOperationEvents_;
    /**
     */
    public boolean hasEnableOperationEvents() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getEnableOperationEvents() {
      return enableOperationEvents_;
    }

    // optional bool enable_GPI_events = 3 [default = false];
    public static final int ENABLE_GPI_EVENTS_FIELD_NUMBER = 3;
    private boolean enableGPIEvents_;
    /**
     *
     * optional    bool
     * enable_serialization_job_events     = 2 [default = true];
     */
    public boolean hasEnableGPIEvents() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * optional    bool
     * enable_serialization_job_events     = 2 [default = true];
     */
    public boolean getEnableGPIEvents() {
      return enableGPIEvents_;
    }

    // optional .Impinj.STP.LowEncodeVolumeEventConfig low_encode_volume_event_config = 6;
    public static final int LOW_ENCODE_VOLUME_EVENT_CONFIG_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.LowEncodeVolumeEventConfig lowEncodeVolumeEventConfig_;
    /**
     *
     * optional    bool                    enable_antenna_events
     * = 4 [default = true]; optional    bool
     * enable_device_exception_events      = 5 [default = true];
     */
    public boolean hasLowEncodeVolumeEventConfig() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * optional    bool                    enable_antenna_events
     * = 4 [default = true]; optional    bool
     * enable_device_exception_events      = 5 [default = true];
     */
    public com.impinj.stp.StpApi.LowEncodeVolumeEventConfig getLowEncodeVolumeEventConfig() {
      return lowEncodeVolumeEventConfig_;
    }
    /**
     *
     * optional    bool                    enable_antenna_events
     * = 4 [default = true]; optional    bool
     * enable_device_exception_events      = 5 [default = true];
     */
    public com.impinj.stp.StpApi.LowEncodeVolumeEventConfigOrBuilder getLowEncodeVolumeEventConfigOrBuilder() {
      return lowEncodeVolumeEventConfig_;
    }

    private void initFields() {
      enableOperationEvents_ = true;
      enableGPIEvents_ = false;
      lowEncodeVolumeEventConfig_ = com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enableOperationEvents_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(3, enableGPIEvents_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(6, lowEncodeVolumeEventConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enableOperationEvents_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, enableGPIEvents_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, lowEncodeVolumeEventConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceEventConfig parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.DeviceEventConfig prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.DeviceEventConfig}
     *
     * Enable or disable classes of reports.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.DeviceEventConfigOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.DeviceEventConfig.class, com.impinj.stp.StpApi.DeviceEventConfig.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.DeviceEventConfig.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getLowEncodeVolumeEventConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        enableOperationEvents_ = true;
        bitField0_ = (bitField0_ & ~0x00000001);
        enableGPIEvents_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          lowEncodeVolumeEventConfig_ = com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.getDefaultInstance();
        } else {
          lowEncodeVolumeEventConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventConfig_descriptor;
      }

      public com.impinj.stp.StpApi.DeviceEventConfig getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.DeviceEventConfig.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.DeviceEventConfig build() {
        com.impinj.stp.StpApi.DeviceEventConfig result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.DeviceEventConfig buildPartial() {
        com.impinj.stp.StpApi.DeviceEventConfig result = new com.impinj.stp.StpApi.DeviceEventConfig(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enableOperationEvents_ = enableOperationEvents_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.enableGPIEvents_ = enableGPIEvents_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          result.lowEncodeVolumeEventConfig_ = lowEncodeVolumeEventConfig_;
        } else {
          result.lowEncodeVolumeEventConfig_ = lowEncodeVolumeEventConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.DeviceEventConfig) {
          return mergeFrom((com.impinj.stp.StpApi.DeviceEventConfig)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.DeviceEventConfig other) {
        if (other == com.impinj.stp.StpApi.DeviceEventConfig.getDefaultInstance()) return this;
        if (other.hasEnableOperationEvents()) {
          setEnableOperationEvents(other.getEnableOperationEvents());
        }
        if (other.hasEnableGPIEvents()) {
          setEnableGPIEvents(other.getEnableGPIEvents());
        }
        if (other.hasLowEncodeVolumeEventConfig()) {
          mergeLowEncodeVolumeEventConfig(other.getLowEncodeVolumeEventConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.DeviceEventConfig parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.DeviceEventConfig) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool enable_operation_events = 1 [default = true];
      private boolean enableOperationEvents_ = true;
      /**
       */
      public boolean hasEnableOperationEvents() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getEnableOperationEvents() {
        return enableOperationEvents_;
      }
      /**
       */
      public Builder setEnableOperationEvents(boolean value) {
        bitField0_ |= 0x00000001;
        enableOperationEvents_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEnableOperationEvents() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enableOperationEvents_ = true;
        onChanged();
        return this;
      }

      // optional bool enable_GPI_events = 3 [default = false];
      private boolean enableGPIEvents_ ;
      /**
       *
       * optional    bool
       * enable_serialization_job_events     = 2 [default = true];
       */
      public boolean hasEnableGPIEvents() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * optional    bool
       * enable_serialization_job_events     = 2 [default = true];
       */
      public boolean getEnableGPIEvents() {
        return enableGPIEvents_;
      }
      /**
       *
       * optional    bool
       * enable_serialization_job_events     = 2 [default = true];
       */
      public Builder setEnableGPIEvents(boolean value) {
        bitField0_ |= 0x00000002;
        enableGPIEvents_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * optional    bool
       * enable_serialization_job_events     = 2 [default = true];
       */
      public Builder clearEnableGPIEvents() {
        bitField0_ = (bitField0_ & ~0x00000002);
        enableGPIEvents_ = false;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.LowEncodeVolumeEventConfig low_encode_volume_event_config = 6;
      private com.impinj.stp.StpApi.LowEncodeVolumeEventConfig lowEncodeVolumeEventConfig_ = com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LowEncodeVolumeEventConfig, com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder, com.impinj.stp.StpApi.LowEncodeVolumeEventConfigOrBuilder> lowEncodeVolumeEventConfigBuilder_;
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public boolean hasLowEncodeVolumeEventConfig() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public com.impinj.stp.StpApi.LowEncodeVolumeEventConfig getLowEncodeVolumeEventConfig() {
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          return lowEncodeVolumeEventConfig_;
        } else {
          return lowEncodeVolumeEventConfigBuilder_.getMessage();
        }
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public Builder setLowEncodeVolumeEventConfig(com.impinj.stp.StpApi.LowEncodeVolumeEventConfig value) {
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          lowEncodeVolumeEventConfig_ = value;
          onChanged();
        } else {
          lowEncodeVolumeEventConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public Builder setLowEncodeVolumeEventConfig(
          com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder builderForValue) {
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          lowEncodeVolumeEventConfig_ = builderForValue.build();
          onChanged();
        } else {
          lowEncodeVolumeEventConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public Builder mergeLowEncodeVolumeEventConfig(com.impinj.stp.StpApi.LowEncodeVolumeEventConfig value) {
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              lowEncodeVolumeEventConfig_ != com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.getDefaultInstance()) {
            lowEncodeVolumeEventConfig_ =
              com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.newBuilder(lowEncodeVolumeEventConfig_).mergeFrom(value).buildPartial();
          } else {
            lowEncodeVolumeEventConfig_ = value;
          }
          onChanged();
        } else {
          lowEncodeVolumeEventConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public Builder clearLowEncodeVolumeEventConfig() {
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          lowEncodeVolumeEventConfig_ = com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.getDefaultInstance();
          onChanged();
        } else {
          lowEncodeVolumeEventConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder getLowEncodeVolumeEventConfigBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getLowEncodeVolumeEventConfigFieldBuilder().getBuilder();
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      public com.impinj.stp.StpApi.LowEncodeVolumeEventConfigOrBuilder getLowEncodeVolumeEventConfigOrBuilder() {
        if (lowEncodeVolumeEventConfigBuilder_ != null) {
          return lowEncodeVolumeEventConfigBuilder_.getMessageOrBuilder();
        } else {
          return lowEncodeVolumeEventConfig_;
        }
      }
      /**
       *
       * optional    bool                    enable_antenna_events
       * = 4 [default = true]; optional    bool
       * enable_device_exception_events      = 5 [default = true];
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LowEncodeVolumeEventConfig, com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder, com.impinj.stp.StpApi.LowEncodeVolumeEventConfigOrBuilder> 
          getLowEncodeVolumeEventConfigFieldBuilder() {
        if (lowEncodeVolumeEventConfigBuilder_ == null) {
          lowEncodeVolumeEventConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.LowEncodeVolumeEventConfig, com.impinj.stp.StpApi.LowEncodeVolumeEventConfig.Builder, com.impinj.stp.StpApi.LowEncodeVolumeEventConfigOrBuilder>(
                  lowEncodeVolumeEventConfig_,
                  getParentForChildren(),
                  isClean());
          lowEncodeVolumeEventConfig_ = null;
        }
        return lowEncodeVolumeEventConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.DeviceEventConfig)
    }

    static {
      defaultInstance = new DeviceEventConfig(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.DeviceEventConfig)
  }

  public interface OperationSummaryReportOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.Timestamp timestamp = 1;
    /**
     */
    boolean hasTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder();

    // required .Impinj.STP.OperationSummaryResult operation_result = 2;
    /**
     */
    boolean hasOperationResult();
    /**
     */
    com.impinj.stp.StpApi.OperationSummaryResult getOperationResult();

    // optional string operation_result_detail = 3;
    /**
     */
    boolean hasOperationResultDetail();
    /**
     */
    java.lang.String getOperationResultDetail();
    /**
     */
    com.google.protobuf.ByteString
        getOperationResultDetailBytes();

    // optional uint32 operation_elapsed_time = 4;
    /**
     */
    boolean hasOperationElapsedTime();
    /**
     */
    int getOperationElapsedTime();

    // optional uint32 tag_operation_total_count = 5;
    /**
     */
    boolean hasTagOperationTotalCount();
    /**
     */
    int getTagOperationTotalCount();

    // optional uint32 tag_operation_pass_count = 6;
    /**
     */
    boolean hasTagOperationPassCount();
    /**
     */
    int getTagOperationPassCount();

    // optional uint32 tag_operation_fail_count = 7;
    /**
     */
    boolean hasTagOperationFailCount();
    /**
     */
    int getTagOperationFailCount();
  }
  /**
   * Protobuf type {@code Impinj.STP.OperationSummaryReport}
   *
   * If enabled in ReportConfig_, this report is sent when the
   * device  operation stops.
   */
  public static final class OperationSummaryReport extends
      com.google.protobuf.GeneratedMessage
      implements OperationSummaryReportOrBuilder {
    // Use OperationSummaryReport.newBuilder() to construct.
    private OperationSummaryReport(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OperationSummaryReport(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OperationSummaryReport defaultInstance;
    public static OperationSummaryReport getDefaultInstance() {
      return defaultInstance;
    }

    public OperationSummaryReport getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OperationSummaryReport(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = timestamp_.toBuilder();
              }
              timestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(timestamp_);
                timestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.OperationSummaryResult value = com.impinj.stp.StpApi.OperationSummaryResult.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                operationResult_ = value;
              }
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              operationResultDetail_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              operationElapsedTime_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              tagOperationTotalCount_ = input.readUInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              tagOperationPassCount_ = input.readUInt32();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              tagOperationFailCount_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReport_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReport_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OperationSummaryReport.class, com.impinj.stp.StpApi.OperationSummaryReport.Builder.class);
    }

    public static com.google.protobuf.Parser<OperationSummaryReport> PARSER =
        new com.google.protobuf.AbstractParser<OperationSummaryReport>() {
      public OperationSummaryReport parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OperationSummaryReport(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OperationSummaryReport> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.Timestamp timestamp = 1;
    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Timestamp timestamp_;
    /**
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getTimestamp() {
      return timestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
      return timestamp_;
    }

    // required .Impinj.STP.OperationSummaryResult operation_result = 2;
    public static final int OPERATION_RESULT_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.OperationSummaryResult operationResult_;
    /**
     */
    public boolean hasOperationResult() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationSummaryResult getOperationResult() {
      return operationResult_;
    }

    // optional string operation_result_detail = 3;
    public static final int OPERATION_RESULT_DETAIL_FIELD_NUMBER = 3;
    private java.lang.Object operationResultDetail_;
    /**
     */
    public boolean hasOperationResultDetail() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public java.lang.String getOperationResultDetail() {
      java.lang.Object ref = operationResultDetail_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          operationResultDetail_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getOperationResultDetailBytes() {
      java.lang.Object ref = operationResultDetail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        operationResultDetail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional uint32 operation_elapsed_time = 4;
    public static final int OPERATION_ELAPSED_TIME_FIELD_NUMBER = 4;
    private int operationElapsedTime_;
    /**
     */
    public boolean hasOperationElapsedTime() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public int getOperationElapsedTime() {
      return operationElapsedTime_;
    }

    // optional uint32 tag_operation_total_count = 5;
    public static final int TAG_OPERATION_TOTAL_COUNT_FIELD_NUMBER = 5;
    private int tagOperationTotalCount_;
    /**
     */
    public boolean hasTagOperationTotalCount() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public int getTagOperationTotalCount() {
      return tagOperationTotalCount_;
    }

    // optional uint32 tag_operation_pass_count = 6;
    public static final int TAG_OPERATION_PASS_COUNT_FIELD_NUMBER = 6;
    private int tagOperationPassCount_;
    /**
     */
    public boolean hasTagOperationPassCount() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public int getTagOperationPassCount() {
      return tagOperationPassCount_;
    }

    // optional uint32 tag_operation_fail_count = 7;
    public static final int TAG_OPERATION_FAIL_COUNT_FIELD_NUMBER = 7;
    private int tagOperationFailCount_;
    /**
     */
    public boolean hasTagOperationFailCount() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     */
    public int getTagOperationFailCount() {
      return tagOperationFailCount_;
    }

    private void initFields() {
      timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      operationResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
      operationResultDetail_ = "";
      operationElapsedTime_ = 0;
      tagOperationTotalCount_ = 0;
      tagOperationPassCount_ = 0;
      tagOperationFailCount_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasTimestamp()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasOperationResult()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, operationResult_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getOperationResultDetailBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, operationElapsedTime_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt32(5, tagOperationTotalCount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt32(6, tagOperationPassCount_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeUInt32(7, tagOperationFailCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, operationResult_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getOperationResultDetailBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, operationElapsedTime_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, tagOperationTotalCount_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, tagOperationPassCount_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, tagOperationFailCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationSummaryReport parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OperationSummaryReport prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OperationSummaryReport}
     *
     * If enabled in ReportConfig_, this report is sent when the
     * device  operation stops.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OperationSummaryReportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReport_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReport_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OperationSummaryReport.class, com.impinj.stp.StpApi.OperationSummaryReport.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OperationSummaryReport.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTimestampFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        operationResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
        bitField0_ = (bitField0_ & ~0x00000002);
        operationResultDetail_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        operationElapsedTime_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        tagOperationTotalCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        tagOperationPassCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        tagOperationFailCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationSummaryReport_descriptor;
      }

      public com.impinj.stp.StpApi.OperationSummaryReport getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OperationSummaryReport.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OperationSummaryReport build() {
        com.impinj.stp.StpApi.OperationSummaryReport result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OperationSummaryReport buildPartial() {
        com.impinj.stp.StpApi.OperationSummaryReport result = new com.impinj.stp.StpApi.OperationSummaryReport(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (timestampBuilder_ == null) {
          result.timestamp_ = timestamp_;
        } else {
          result.timestamp_ = timestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.operationResult_ = operationResult_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.operationResultDetail_ = operationResultDetail_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.operationElapsedTime_ = operationElapsedTime_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.tagOperationTotalCount_ = tagOperationTotalCount_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.tagOperationPassCount_ = tagOperationPassCount_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.tagOperationFailCount_ = tagOperationFailCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OperationSummaryReport) {
          return mergeFrom((com.impinj.stp.StpApi.OperationSummaryReport)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OperationSummaryReport other) {
        if (other == com.impinj.stp.StpApi.OperationSummaryReport.getDefaultInstance()) return this;
        if (other.hasTimestamp()) {
          mergeTimestamp(other.getTimestamp());
        }
        if (other.hasOperationResult()) {
          setOperationResult(other.getOperationResult());
        }
        if (other.hasOperationResultDetail()) {
          bitField0_ |= 0x00000004;
          operationResultDetail_ = other.operationResultDetail_;
          onChanged();
        }
        if (other.hasOperationElapsedTime()) {
          setOperationElapsedTime(other.getOperationElapsedTime());
        }
        if (other.hasTagOperationTotalCount()) {
          setTagOperationTotalCount(other.getTagOperationTotalCount());
        }
        if (other.hasTagOperationPassCount()) {
          setTagOperationPassCount(other.getTagOperationPassCount());
        }
        if (other.hasTagOperationFailCount()) {
          setTagOperationFailCount(other.getTagOperationFailCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasTimestamp()) {
          
          return false;
        }
        if (!hasOperationResult()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OperationSummaryReport parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OperationSummaryReport) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.Timestamp timestamp = 1;
      private com.impinj.stp.StpApi.Timestamp timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> timestampBuilder_;
      /**
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getTimestamp() {
        if (timestampBuilder_ == null) {
          return timestamp_;
        } else {
          return timestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          timestamp_ = value;
          onChanged();
        } else {
          timestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (timestampBuilder_ == null) {
          timestamp_ = builderForValue.build();
          onChanged();
        } else {
          timestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              timestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            timestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
          } else {
            timestamp_ = value;
          }
          onChanged();
        } else {
          timestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearTimestamp() {
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getTimestampBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
        if (timestampBuilder_ != null) {
          return timestampBuilder_.getMessageOrBuilder();
        } else {
          return timestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getTimestampFieldBuilder() {
        if (timestampBuilder_ == null) {
          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  timestamp_,
                  getParentForChildren(),
                  isClean());
          timestamp_ = null;
        }
        return timestampBuilder_;
      }

      // required .Impinj.STP.OperationSummaryResult operation_result = 2;
      private com.impinj.stp.StpApi.OperationSummaryResult operationResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
      /**
       */
      public boolean hasOperationResult() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryResult getOperationResult() {
        return operationResult_;
      }
      /**
       */
      public Builder setOperationResult(com.impinj.stp.StpApi.OperationSummaryResult value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        operationResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearOperationResult() {
        bitField0_ = (bitField0_ & ~0x00000002);
        operationResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
        onChanged();
        return this;
      }

      // optional string operation_result_detail = 3;
      private java.lang.Object operationResultDetail_ = "";
      /**
       */
      public boolean hasOperationResultDetail() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public java.lang.String getOperationResultDetail() {
        java.lang.Object ref = operationResultDetail_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          operationResultDetail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getOperationResultDetailBytes() {
        java.lang.Object ref = operationResultDetail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          operationResultDetail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setOperationResultDetail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        operationResultDetail_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearOperationResultDetail() {
        bitField0_ = (bitField0_ & ~0x00000004);
        operationResultDetail_ = getDefaultInstance().getOperationResultDetail();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setOperationResultDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        operationResultDetail_ = value;
        onChanged();
        return this;
      }

      // optional uint32 operation_elapsed_time = 4;
      private int operationElapsedTime_ ;
      /**
       */
      public boolean hasOperationElapsedTime() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public int getOperationElapsedTime() {
        return operationElapsedTime_;
      }
      /**
       */
      public Builder setOperationElapsedTime(int value) {
        bitField0_ |= 0x00000008;
        operationElapsedTime_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearOperationElapsedTime() {
        bitField0_ = (bitField0_ & ~0x00000008);
        operationElapsedTime_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 tag_operation_total_count = 5;
      private int tagOperationTotalCount_ ;
      /**
       */
      public boolean hasTagOperationTotalCount() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public int getTagOperationTotalCount() {
        return tagOperationTotalCount_;
      }
      /**
       */
      public Builder setTagOperationTotalCount(int value) {
        bitField0_ |= 0x00000010;
        tagOperationTotalCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagOperationTotalCount() {
        bitField0_ = (bitField0_ & ~0x00000010);
        tagOperationTotalCount_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 tag_operation_pass_count = 6;
      private int tagOperationPassCount_ ;
      /**
       */
      public boolean hasTagOperationPassCount() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public int getTagOperationPassCount() {
        return tagOperationPassCount_;
      }
      /**
       */
      public Builder setTagOperationPassCount(int value) {
        bitField0_ |= 0x00000020;
        tagOperationPassCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagOperationPassCount() {
        bitField0_ = (bitField0_ & ~0x00000020);
        tagOperationPassCount_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 tag_operation_fail_count = 7;
      private int tagOperationFailCount_ ;
      /**
       */
      public boolean hasTagOperationFailCount() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       */
      public int getTagOperationFailCount() {
        return tagOperationFailCount_;
      }
      /**
       */
      public Builder setTagOperationFailCount(int value) {
        bitField0_ |= 0x00000040;
        tagOperationFailCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagOperationFailCount() {
        bitField0_ = (bitField0_ & ~0x00000040);
        tagOperationFailCount_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OperationSummaryReport)
    }

    static {
      defaultInstance = new OperationSummaryReport(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OperationSummaryReport)
  }

  public interface TagOperationReportOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.TagOperationReportType tag_operation_report_type = 1;
    /**
     */
    boolean hasTagOperationReportType();
    /**
     */
    com.impinj.stp.StpApi.TagOperationReportType getTagOperationReportType();

    // optional .Impinj.STP.TagOperationResult tag_operation_result = 2;
    /**
     */
    boolean hasTagOperationResult();
    /**
     */
    com.impinj.stp.StpApi.TagOperationResult getTagOperationResult();

    // optional string tag_operation_result_detail = 3;
    /**
     */
    boolean hasTagOperationResultDetail();
    /**
     */
    java.lang.String getTagOperationResultDetail();
    /**
     */
    com.google.protobuf.ByteString
        getTagOperationResultDetailBytes();

    // optional bytes TID = 4;
    /**
     *
     * big endian 16-bit words representing the TID.
     */
    boolean hasTID();
    /**
     *
     * big endian 16-bit words representing the TID.
     */
    com.google.protobuf.ByteString getTID();

    // optional bytes EPC = 5;
    /**
     *
     * big endian 16-bit words representing the EPC.
     */
    boolean hasEPC();
    /**
     *
     * big endian 16-bit words representing the EPC.
     */
    com.google.protobuf.ByteString getEPC();

    // optional bytes EPC_attempted = 6;
    /**
     */
    boolean hasEPCAttempted();
    /**
     */
    com.google.protobuf.ByteString getEPCAttempted();

    // optional bytes user_memory_inv = 19;
    /**
     *
     * big endian 16-bit words representing the user memory. Used
     * in  Inventory mode, note that 'user_memory_result' is
     * unrelated.
     */
    boolean hasUserMemoryInv();
    /**
     *
     * big endian 16-bit words representing the user memory. Used
     * in  Inventory mode, note that 'user_memory_result' is
     * unrelated.
     */
    com.google.protobuf.ByteString getUserMemoryInv();

    // optional bool EPC_memory_result = 7;
    /**
     */
    boolean hasEPCMemoryResult();
    /**
     */
    boolean getEPCMemoryResult();

    // optional bool access_password_result = 8;
    /**
     */
    boolean hasAccessPasswordResult();
    /**
     */
    boolean getAccessPasswordResult();

    // optional bool kill_password_result = 9;
    /**
     */
    boolean hasKillPasswordResult();
    /**
     */
    boolean getKillPasswordResult();

    // optional bool lock_config_result = 10;
    /**
     */
    boolean hasLockConfigResult();
    /**
     */
    boolean getLockConfigResult();

    // optional bool user_memory_result = 11;
    /**
     */
    boolean hasUserMemoryResult();
    /**
     */
    boolean getUserMemoryResult();

    // optional bool blockpermalock_result = 12;
    /**
     */
    boolean hasBlockpermalockResult();
    /**
     */
    boolean getBlockpermalockResult();

    // optional bool kill_tag_result = 18;
    /**
     */
    boolean hasKillTagResult();
    /**
     */
    boolean getKillTagResult();

    // optional bool pc_word_result = 20;
    /**
     */
    boolean hasPcWordResult();
    /**
     */
    boolean getPcWordResult();

    // optional bool tag_specific_feature_config_result = 21;
    /**
     */
    boolean hasTagSpecificFeatureConfigResult();
    /**
     */
    boolean getTagSpecificFeatureConfigResult();

    // optional bool tid_write_result = 22;
    /**
     */
    boolean hasTidWriteResult();
    /**
     */
    boolean getTidWriteResult();

    // optional .Impinj.STP.Timestamp timestamp = 13;
    /**
     */
    boolean hasTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder();

    // optional uint32 antenna_ID = 14;
    /**
     */
    boolean hasAntennaID();
    /**
     */
    int getAntennaID();

    // optional uint32 frequency = 15;
    /**
     *
     * Units are kHz
     */
    boolean hasFrequency();
    /**
     *
     * Units are kHz
     */
    int getFrequency();

    // optional sint32 RSSI = 16;
    /**
     *
     * RSSI of the Ack response (EPC) in units of dBm * 100.
     */
    boolean hasRSSI();
    /**
     *
     * RSSI of the Ack response (EPC) in units of dBm * 100.
     */
    int getRSSI();

    // optional uint32 job_id = 17;
    /**
     */
    boolean hasJobId();
    /**
     */
    int getJobId();
  }
  /**
   * Protobuf type {@code Impinj.STP.TagOperationReport}
   *
   * Timestamp, antenna id, frequency, RSSI should be last values
   * on last attempt. All &#92;*_result bools should be included and
   * set to true when they are  enabled in the
   * OperationResponsibility and confirmed as complete.
   */
  public static final class TagOperationReport extends
      com.google.protobuf.GeneratedMessage
      implements TagOperationReportOrBuilder {
    // Use TagOperationReport.newBuilder() to construct.
    private TagOperationReport(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TagOperationReport(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TagOperationReport defaultInstance;
    public static TagOperationReport getDefaultInstance() {
      return defaultInstance;
    }

    public TagOperationReport getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TagOperationReport(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.TagOperationReportType value = com.impinj.stp.StpApi.TagOperationReportType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                tagOperationReportType_ = value;
              }
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.TagOperationResult value = com.impinj.stp.StpApi.TagOperationResult.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                tagOperationResult_ = value;
              }
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              tagOperationResultDetail_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              tID_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              ePC_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              ePCAttempted_ = input.readBytes();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000080;
              ePCMemoryResult_ = input.readBool();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000100;
              accessPasswordResult_ = input.readBool();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000200;
              killPasswordResult_ = input.readBool();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000400;
              lockConfigResult_ = input.readBool();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000800;
              userMemoryResult_ = input.readBool();
              break;
            }
            case 96: {
              bitField0_ |= 0x00001000;
              blockpermalockResult_ = input.readBool();
              break;
            }
            case 106: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00020000) == 0x00020000)) {
                subBuilder = timestamp_.toBuilder();
              }
              timestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(timestamp_);
                timestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00020000;
              break;
            }
            case 112: {
              bitField0_ |= 0x00040000;
              antennaID_ = input.readUInt32();
              break;
            }
            case 120: {
              bitField0_ |= 0x00080000;
              frequency_ = input.readUInt32();
              break;
            }
            case 128: {
              bitField0_ |= 0x00100000;
              rSSI_ = input.readSInt32();
              break;
            }
            case 136: {
              bitField0_ |= 0x00200000;
              jobId_ = input.readUInt32();
              break;
            }
            case 144: {
              bitField0_ |= 0x00002000;
              killTagResult_ = input.readBool();
              break;
            }
            case 154: {
              bitField0_ |= 0x00000040;
              userMemoryInv_ = input.readBytes();
              break;
            }
            case 160: {
              bitField0_ |= 0x00004000;
              pcWordResult_ = input.readBool();
              break;
            }
            case 168: {
              bitField0_ |= 0x00008000;
              tagSpecificFeatureConfigResult_ = input.readBool();
              break;
            }
            case 176: {
              bitField0_ |= 0x00010000;
              tidWriteResult_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReport_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReport_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TagOperationReport.class, com.impinj.stp.StpApi.TagOperationReport.Builder.class);
    }

    public static com.google.protobuf.Parser<TagOperationReport> PARSER =
        new com.google.protobuf.AbstractParser<TagOperationReport>() {
      public TagOperationReport parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TagOperationReport(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TagOperationReport> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.TagOperationReportType tag_operation_report_type = 1;
    public static final int TAG_OPERATION_REPORT_TYPE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.TagOperationReportType tagOperationReportType_;
    /**
     */
    public boolean hasTagOperationReportType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagOperationReportType getTagOperationReportType() {
      return tagOperationReportType_;
    }

    // optional .Impinj.STP.TagOperationResult tag_operation_result = 2;
    public static final int TAG_OPERATION_RESULT_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.TagOperationResult tagOperationResult_;
    /**
     */
    public boolean hasTagOperationResult() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagOperationResult getTagOperationResult() {
      return tagOperationResult_;
    }

    // optional string tag_operation_result_detail = 3;
    public static final int TAG_OPERATION_RESULT_DETAIL_FIELD_NUMBER = 3;
    private java.lang.Object tagOperationResultDetail_;
    /**
     */
    public boolean hasTagOperationResultDetail() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public java.lang.String getTagOperationResultDetail() {
      java.lang.Object ref = tagOperationResultDetail_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          tagOperationResultDetail_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getTagOperationResultDetailBytes() {
      java.lang.Object ref = tagOperationResultDetail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tagOperationResultDetail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bytes TID = 4;
    public static final int TID_FIELD_NUMBER = 4;
    private com.google.protobuf.ByteString tID_;
    /**
     *
     * big endian 16-bit words representing the TID.
     */
    public boolean hasTID() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * big endian 16-bit words representing the TID.
     */
    public com.google.protobuf.ByteString getTID() {
      return tID_;
    }

    // optional bytes EPC = 5;
    public static final int EPC_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString ePC_;
    /**
     *
     * big endian 16-bit words representing the EPC.
     */
    public boolean hasEPC() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * big endian 16-bit words representing the EPC.
     */
    public com.google.protobuf.ByteString getEPC() {
      return ePC_;
    }

    // optional bytes EPC_attempted = 6;
    public static final int EPC_ATTEMPTED_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString ePCAttempted_;
    /**
     */
    public boolean hasEPCAttempted() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.google.protobuf.ByteString getEPCAttempted() {
      return ePCAttempted_;
    }

    // optional bytes user_memory_inv = 19;
    public static final int USER_MEMORY_INV_FIELD_NUMBER = 19;
    private com.google.protobuf.ByteString userMemoryInv_;
    /**
     *
     * big endian 16-bit words representing the user memory. Used
     * in  Inventory mode, note that 'user_memory_result' is
     * unrelated.
     */
    public boolean hasUserMemoryInv() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     *
     * big endian 16-bit words representing the user memory. Used
     * in  Inventory mode, note that 'user_memory_result' is
     * unrelated.
     */
    public com.google.protobuf.ByteString getUserMemoryInv() {
      return userMemoryInv_;
    }

    // optional bool EPC_memory_result = 7;
    public static final int EPC_MEMORY_RESULT_FIELD_NUMBER = 7;
    private boolean ePCMemoryResult_;
    /**
     */
    public boolean hasEPCMemoryResult() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     */
    public boolean getEPCMemoryResult() {
      return ePCMemoryResult_;
    }

    // optional bool access_password_result = 8;
    public static final int ACCESS_PASSWORD_RESULT_FIELD_NUMBER = 8;
    private boolean accessPasswordResult_;
    /**
     */
    public boolean hasAccessPasswordResult() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     */
    public boolean getAccessPasswordResult() {
      return accessPasswordResult_;
    }

    // optional bool kill_password_result = 9;
    public static final int KILL_PASSWORD_RESULT_FIELD_NUMBER = 9;
    private boolean killPasswordResult_;
    /**
     */
    public boolean hasKillPasswordResult() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     */
    public boolean getKillPasswordResult() {
      return killPasswordResult_;
    }

    // optional bool lock_config_result = 10;
    public static final int LOCK_CONFIG_RESULT_FIELD_NUMBER = 10;
    private boolean lockConfigResult_;
    /**
     */
    public boolean hasLockConfigResult() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     */
    public boolean getLockConfigResult() {
      return lockConfigResult_;
    }

    // optional bool user_memory_result = 11;
    public static final int USER_MEMORY_RESULT_FIELD_NUMBER = 11;
    private boolean userMemoryResult_;
    /**
     */
    public boolean hasUserMemoryResult() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     */
    public boolean getUserMemoryResult() {
      return userMemoryResult_;
    }

    // optional bool blockpermalock_result = 12;
    public static final int BLOCKPERMALOCK_RESULT_FIELD_NUMBER = 12;
    private boolean blockpermalockResult_;
    /**
     */
    public boolean hasBlockpermalockResult() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     */
    public boolean getBlockpermalockResult() {
      return blockpermalockResult_;
    }

    // optional bool kill_tag_result = 18;
    public static final int KILL_TAG_RESULT_FIELD_NUMBER = 18;
    private boolean killTagResult_;
    /**
     */
    public boolean hasKillTagResult() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     */
    public boolean getKillTagResult() {
      return killTagResult_;
    }

    // optional bool pc_word_result = 20;
    public static final int PC_WORD_RESULT_FIELD_NUMBER = 20;
    private boolean pcWordResult_;
    /**
     */
    public boolean hasPcWordResult() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     */
    public boolean getPcWordResult() {
      return pcWordResult_;
    }

    // optional bool tag_specific_feature_config_result = 21;
    public static final int TAG_SPECIFIC_FEATURE_CONFIG_RESULT_FIELD_NUMBER = 21;
    private boolean tagSpecificFeatureConfigResult_;
    /**
     */
    public boolean hasTagSpecificFeatureConfigResult() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     */
    public boolean getTagSpecificFeatureConfigResult() {
      return tagSpecificFeatureConfigResult_;
    }

    // optional bool tid_write_result = 22;
    public static final int TID_WRITE_RESULT_FIELD_NUMBER = 22;
    private boolean tidWriteResult_;
    /**
     */
    public boolean hasTidWriteResult() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     */
    public boolean getTidWriteResult() {
      return tidWriteResult_;
    }

    // optional .Impinj.STP.Timestamp timestamp = 13;
    public static final int TIMESTAMP_FIELD_NUMBER = 13;
    private com.impinj.stp.StpApi.Timestamp timestamp_;
    /**
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getTimestamp() {
      return timestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
      return timestamp_;
    }

    // optional uint32 antenna_ID = 14;
    public static final int ANTENNA_ID_FIELD_NUMBER = 14;
    private int antennaID_;
    /**
     */
    public boolean hasAntennaID() {
      return ((bitField0_ & 0x00040000) == 0x00040000);
    }
    /**
     */
    public int getAntennaID() {
      return antennaID_;
    }

    // optional uint32 frequency = 15;
    public static final int FREQUENCY_FIELD_NUMBER = 15;
    private int frequency_;
    /**
     *
     * Units are kHz
     */
    public boolean hasFrequency() {
      return ((bitField0_ & 0x00080000) == 0x00080000);
    }
    /**
     *
     * Units are kHz
     */
    public int getFrequency() {
      return frequency_;
    }

    // optional sint32 RSSI = 16;
    public static final int RSSI_FIELD_NUMBER = 16;
    private int rSSI_;
    /**
     *
     * RSSI of the Ack response (EPC) in units of dBm * 100.
     */
    public boolean hasRSSI() {
      return ((bitField0_ & 0x00100000) == 0x00100000);
    }
    /**
     *
     * RSSI of the Ack response (EPC) in units of dBm * 100.
     */
    public int getRSSI() {
      return rSSI_;
    }

    // optional uint32 job_id = 17;
    public static final int JOB_ID_FIELD_NUMBER = 17;
    private int jobId_;
    /**
     */
    public boolean hasJobId() {
      return ((bitField0_ & 0x00200000) == 0x00200000);
    }
    /**
     */
    public int getJobId() {
      return jobId_;
    }

    private void initFields() {
      tagOperationReportType_ = com.impinj.stp.StpApi.TagOperationReportType.TAG_OPERATION_REPORT_TYPE_INVENTORY;
      tagOperationResult_ = com.impinj.stp.StpApi.TagOperationResult.TAG_OPERATION_RESULT_PASS;
      tagOperationResultDetail_ = "";
      tID_ = com.google.protobuf.ByteString.EMPTY;
      ePC_ = com.google.protobuf.ByteString.EMPTY;
      ePCAttempted_ = com.google.protobuf.ByteString.EMPTY;
      userMemoryInv_ = com.google.protobuf.ByteString.EMPTY;
      ePCMemoryResult_ = false;
      accessPasswordResult_ = false;
      killPasswordResult_ = false;
      lockConfigResult_ = false;
      userMemoryResult_ = false;
      blockpermalockResult_ = false;
      killTagResult_ = false;
      pcWordResult_ = false;
      tagSpecificFeatureConfigResult_ = false;
      tidWriteResult_ = false;
      timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      antennaID_ = 0;
      frequency_ = 0;
      rSSI_ = 0;
      jobId_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasTagOperationReportType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, tagOperationReportType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, tagOperationResult_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getTagOperationResultDetailBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, tID_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, ePC_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, ePCAttempted_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBool(7, ePCMemoryResult_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBool(8, accessPasswordResult_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBool(9, killPasswordResult_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBool(10, lockConfigResult_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBool(11, userMemoryResult_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBool(12, blockpermalockResult_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeMessage(13, timestamp_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeUInt32(14, antennaID_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeUInt32(15, frequency_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        output.writeSInt32(16, rSSI_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        output.writeUInt32(17, jobId_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBool(18, killTagResult_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(19, userMemoryInv_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeBool(20, pcWordResult_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeBool(21, tagSpecificFeatureConfigResult_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeBool(22, tidWriteResult_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, tagOperationReportType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, tagOperationResult_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getTagOperationResultDetailBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, tID_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, ePC_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, ePCAttempted_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(7, ePCMemoryResult_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, accessPasswordResult_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(9, killPasswordResult_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, lockConfigResult_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(11, userMemoryResult_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, blockpermalockResult_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, timestamp_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(14, antennaID_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(15, frequency_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(16, rSSI_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(17, jobId_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(18, killTagResult_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(19, userMemoryInv_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(20, pcWordResult_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(21, tagSpecificFeatureConfigResult_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(22, tidWriteResult_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagOperationReport parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TagOperationReport prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TagOperationReport}
     *
     * Timestamp, antenna id, frequency, RSSI should be last values
     * on last attempt. All &#92;*_result bools should be included and
     * set to true when they are  enabled in the
     * OperationResponsibility and confirmed as complete.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TagOperationReportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReport_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReport_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TagOperationReport.class, com.impinj.stp.StpApi.TagOperationReport.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TagOperationReport.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTimestampFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        tagOperationReportType_ = com.impinj.stp.StpApi.TagOperationReportType.TAG_OPERATION_REPORT_TYPE_INVENTORY;
        bitField0_ = (bitField0_ & ~0x00000001);
        tagOperationResult_ = com.impinj.stp.StpApi.TagOperationResult.TAG_OPERATION_RESULT_PASS;
        bitField0_ = (bitField0_ & ~0x00000002);
        tagOperationResultDetail_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        tID_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        ePC_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        ePCAttempted_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        userMemoryInv_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        ePCMemoryResult_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        accessPasswordResult_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        killPasswordResult_ = false;
        bitField0_ = (bitField0_ & ~0x00000200);
        lockConfigResult_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        userMemoryResult_ = false;
        bitField0_ = (bitField0_ & ~0x00000800);
        blockpermalockResult_ = false;
        bitField0_ = (bitField0_ & ~0x00001000);
        killTagResult_ = false;
        bitField0_ = (bitField0_ & ~0x00002000);
        pcWordResult_ = false;
        bitField0_ = (bitField0_ & ~0x00004000);
        tagSpecificFeatureConfigResult_ = false;
        bitField0_ = (bitField0_ & ~0x00008000);
        tidWriteResult_ = false;
        bitField0_ = (bitField0_ & ~0x00010000);
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        antennaID_ = 0;
        bitField0_ = (bitField0_ & ~0x00040000);
        frequency_ = 0;
        bitField0_ = (bitField0_ & ~0x00080000);
        rSSI_ = 0;
        bitField0_ = (bitField0_ & ~0x00100000);
        jobId_ = 0;
        bitField0_ = (bitField0_ & ~0x00200000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagOperationReport_descriptor;
      }

      public com.impinj.stp.StpApi.TagOperationReport getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TagOperationReport.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TagOperationReport build() {
        com.impinj.stp.StpApi.TagOperationReport result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TagOperationReport buildPartial() {
        com.impinj.stp.StpApi.TagOperationReport result = new com.impinj.stp.StpApi.TagOperationReport(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tagOperationReportType_ = tagOperationReportType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.tagOperationResult_ = tagOperationResult_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.tagOperationResultDetail_ = tagOperationResultDetail_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.tID_ = tID_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.ePC_ = ePC_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.ePCAttempted_ = ePCAttempted_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.userMemoryInv_ = userMemoryInv_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.ePCMemoryResult_ = ePCMemoryResult_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.accessPasswordResult_ = accessPasswordResult_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.killPasswordResult_ = killPasswordResult_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.lockConfigResult_ = lockConfigResult_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.userMemoryResult_ = userMemoryResult_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.blockpermalockResult_ = blockpermalockResult_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.killTagResult_ = killTagResult_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.pcWordResult_ = pcWordResult_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        result.tagSpecificFeatureConfigResult_ = tagSpecificFeatureConfigResult_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.tidWriteResult_ = tidWriteResult_;
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00020000;
        }
        if (timestampBuilder_ == null) {
          result.timestamp_ = timestamp_;
        } else {
          result.timestamp_ = timestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
          to_bitField0_ |= 0x00040000;
        }
        result.antennaID_ = antennaID_;
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00080000;
        }
        result.frequency_ = frequency_;
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00100000;
        }
        result.rSSI_ = rSSI_;
        if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
          to_bitField0_ |= 0x00200000;
        }
        result.jobId_ = jobId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TagOperationReport) {
          return mergeFrom((com.impinj.stp.StpApi.TagOperationReport)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TagOperationReport other) {
        if (other == com.impinj.stp.StpApi.TagOperationReport.getDefaultInstance()) return this;
        if (other.hasTagOperationReportType()) {
          setTagOperationReportType(other.getTagOperationReportType());
        }
        if (other.hasTagOperationResult()) {
          setTagOperationResult(other.getTagOperationResult());
        }
        if (other.hasTagOperationResultDetail()) {
          bitField0_ |= 0x00000004;
          tagOperationResultDetail_ = other.tagOperationResultDetail_;
          onChanged();
        }
        if (other.hasTID()) {
          setTID(other.getTID());
        }
        if (other.hasEPC()) {
          setEPC(other.getEPC());
        }
        if (other.hasEPCAttempted()) {
          setEPCAttempted(other.getEPCAttempted());
        }
        if (other.hasUserMemoryInv()) {
          setUserMemoryInv(other.getUserMemoryInv());
        }
        if (other.hasEPCMemoryResult()) {
          setEPCMemoryResult(other.getEPCMemoryResult());
        }
        if (other.hasAccessPasswordResult()) {
          setAccessPasswordResult(other.getAccessPasswordResult());
        }
        if (other.hasKillPasswordResult()) {
          setKillPasswordResult(other.getKillPasswordResult());
        }
        if (other.hasLockConfigResult()) {
          setLockConfigResult(other.getLockConfigResult());
        }
        if (other.hasUserMemoryResult()) {
          setUserMemoryResult(other.getUserMemoryResult());
        }
        if (other.hasBlockpermalockResult()) {
          setBlockpermalockResult(other.getBlockpermalockResult());
        }
        if (other.hasKillTagResult()) {
          setKillTagResult(other.getKillTagResult());
        }
        if (other.hasPcWordResult()) {
          setPcWordResult(other.getPcWordResult());
        }
        if (other.hasTagSpecificFeatureConfigResult()) {
          setTagSpecificFeatureConfigResult(other.getTagSpecificFeatureConfigResult());
        }
        if (other.hasTidWriteResult()) {
          setTidWriteResult(other.getTidWriteResult());
        }
        if (other.hasTimestamp()) {
          mergeTimestamp(other.getTimestamp());
        }
        if (other.hasAntennaID()) {
          setAntennaID(other.getAntennaID());
        }
        if (other.hasFrequency()) {
          setFrequency(other.getFrequency());
        }
        if (other.hasRSSI()) {
          setRSSI(other.getRSSI());
        }
        if (other.hasJobId()) {
          setJobId(other.getJobId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasTagOperationReportType()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TagOperationReport parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TagOperationReport) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.TagOperationReportType tag_operation_report_type = 1;
      private com.impinj.stp.StpApi.TagOperationReportType tagOperationReportType_ = com.impinj.stp.StpApi.TagOperationReportType.TAG_OPERATION_REPORT_TYPE_INVENTORY;
      /**
       */
      public boolean hasTagOperationReportType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReportType getTagOperationReportType() {
        return tagOperationReportType_;
      }
      /**
       */
      public Builder setTagOperationReportType(com.impinj.stp.StpApi.TagOperationReportType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        tagOperationReportType_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagOperationReportType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tagOperationReportType_ = com.impinj.stp.StpApi.TagOperationReportType.TAG_OPERATION_REPORT_TYPE_INVENTORY;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.TagOperationResult tag_operation_result = 2;
      private com.impinj.stp.StpApi.TagOperationResult tagOperationResult_ = com.impinj.stp.StpApi.TagOperationResult.TAG_OPERATION_RESULT_PASS;
      /**
       */
      public boolean hasTagOperationResult() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationResult getTagOperationResult() {
        return tagOperationResult_;
      }
      /**
       */
      public Builder setTagOperationResult(com.impinj.stp.StpApi.TagOperationResult value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        tagOperationResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagOperationResult() {
        bitField0_ = (bitField0_ & ~0x00000002);
        tagOperationResult_ = com.impinj.stp.StpApi.TagOperationResult.TAG_OPERATION_RESULT_PASS;
        onChanged();
        return this;
      }

      // optional string tag_operation_result_detail = 3;
      private java.lang.Object tagOperationResultDetail_ = "";
      /**
       */
      public boolean hasTagOperationResultDetail() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public java.lang.String getTagOperationResultDetail() {
        java.lang.Object ref = tagOperationResultDetail_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          tagOperationResultDetail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getTagOperationResultDetailBytes() {
        java.lang.Object ref = tagOperationResultDetail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tagOperationResultDetail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setTagOperationResultDetail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        tagOperationResultDetail_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagOperationResultDetail() {
        bitField0_ = (bitField0_ & ~0x00000004);
        tagOperationResultDetail_ = getDefaultInstance().getTagOperationResultDetail();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setTagOperationResultDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        tagOperationResultDetail_ = value;
        onChanged();
        return this;
      }

      // optional bytes TID = 4;
      private com.google.protobuf.ByteString tID_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * big endian 16-bit words representing the TID.
       */
      public boolean hasTID() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * big endian 16-bit words representing the TID.
       */
      public com.google.protobuf.ByteString getTID() {
        return tID_;
      }
      /**
       *
       * big endian 16-bit words representing the TID.
       */
      public Builder setTID(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        tID_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * big endian 16-bit words representing the TID.
       */
      public Builder clearTID() {
        bitField0_ = (bitField0_ & ~0x00000008);
        tID_ = getDefaultInstance().getTID();
        onChanged();
        return this;
      }

      // optional bytes EPC = 5;
      private com.google.protobuf.ByteString ePC_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * big endian 16-bit words representing the EPC.
       */
      public boolean hasEPC() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * big endian 16-bit words representing the EPC.
       */
      public com.google.protobuf.ByteString getEPC() {
        return ePC_;
      }
      /**
       *
       * big endian 16-bit words representing the EPC.
       */
      public Builder setEPC(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        ePC_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * big endian 16-bit words representing the EPC.
       */
      public Builder clearEPC() {
        bitField0_ = (bitField0_ & ~0x00000010);
        ePC_ = getDefaultInstance().getEPC();
        onChanged();
        return this;
      }

      // optional bytes EPC_attempted = 6;
      private com.google.protobuf.ByteString ePCAttempted_ = com.google.protobuf.ByteString.EMPTY;
      /**
       */
      public boolean hasEPCAttempted() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.google.protobuf.ByteString getEPCAttempted() {
        return ePCAttempted_;
      }
      /**
       */
      public Builder setEPCAttempted(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        ePCAttempted_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEPCAttempted() {
        bitField0_ = (bitField0_ & ~0x00000020);
        ePCAttempted_ = getDefaultInstance().getEPCAttempted();
        onChanged();
        return this;
      }

      // optional bytes user_memory_inv = 19;
      private com.google.protobuf.ByteString userMemoryInv_ = com.google.protobuf.ByteString.EMPTY;
      /**
       *
       * big endian 16-bit words representing the user memory. Used
       * in  Inventory mode, note that 'user_memory_result' is
       * unrelated.
       */
      public boolean hasUserMemoryInv() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       *
       * big endian 16-bit words representing the user memory. Used
       * in  Inventory mode, note that 'user_memory_result' is
       * unrelated.
       */
      public com.google.protobuf.ByteString getUserMemoryInv() {
        return userMemoryInv_;
      }
      /**
       *
       * big endian 16-bit words representing the user memory. Used
       * in  Inventory mode, note that 'user_memory_result' is
       * unrelated.
       */
      public Builder setUserMemoryInv(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        userMemoryInv_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * big endian 16-bit words representing the user memory. Used
       * in  Inventory mode, note that 'user_memory_result' is
       * unrelated.
       */
      public Builder clearUserMemoryInv() {
        bitField0_ = (bitField0_ & ~0x00000040);
        userMemoryInv_ = getDefaultInstance().getUserMemoryInv();
        onChanged();
        return this;
      }

      // optional bool EPC_memory_result = 7;
      private boolean ePCMemoryResult_ ;
      /**
       */
      public boolean hasEPCMemoryResult() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       */
      public boolean getEPCMemoryResult() {
        return ePCMemoryResult_;
      }
      /**
       */
      public Builder setEPCMemoryResult(boolean value) {
        bitField0_ |= 0x00000080;
        ePCMemoryResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEPCMemoryResult() {
        bitField0_ = (bitField0_ & ~0x00000080);
        ePCMemoryResult_ = false;
        onChanged();
        return this;
      }

      // optional bool access_password_result = 8;
      private boolean accessPasswordResult_ ;
      /**
       */
      public boolean hasAccessPasswordResult() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       */
      public boolean getAccessPasswordResult() {
        return accessPasswordResult_;
      }
      /**
       */
      public Builder setAccessPasswordResult(boolean value) {
        bitField0_ |= 0x00000100;
        accessPasswordResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearAccessPasswordResult() {
        bitField0_ = (bitField0_ & ~0x00000100);
        accessPasswordResult_ = false;
        onChanged();
        return this;
      }

      // optional bool kill_password_result = 9;
      private boolean killPasswordResult_ ;
      /**
       */
      public boolean hasKillPasswordResult() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       */
      public boolean getKillPasswordResult() {
        return killPasswordResult_;
      }
      /**
       */
      public Builder setKillPasswordResult(boolean value) {
        bitField0_ |= 0x00000200;
        killPasswordResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearKillPasswordResult() {
        bitField0_ = (bitField0_ & ~0x00000200);
        killPasswordResult_ = false;
        onChanged();
        return this;
      }

      // optional bool lock_config_result = 10;
      private boolean lockConfigResult_ ;
      /**
       */
      public boolean hasLockConfigResult() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       */
      public boolean getLockConfigResult() {
        return lockConfigResult_;
      }
      /**
       */
      public Builder setLockConfigResult(boolean value) {
        bitField0_ |= 0x00000400;
        lockConfigResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearLockConfigResult() {
        bitField0_ = (bitField0_ & ~0x00000400);
        lockConfigResult_ = false;
        onChanged();
        return this;
      }

      // optional bool user_memory_result = 11;
      private boolean userMemoryResult_ ;
      /**
       */
      public boolean hasUserMemoryResult() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       */
      public boolean getUserMemoryResult() {
        return userMemoryResult_;
      }
      /**
       */
      public Builder setUserMemoryResult(boolean value) {
        bitField0_ |= 0x00000800;
        userMemoryResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearUserMemoryResult() {
        bitField0_ = (bitField0_ & ~0x00000800);
        userMemoryResult_ = false;
        onChanged();
        return this;
      }

      // optional bool blockpermalock_result = 12;
      private boolean blockpermalockResult_ ;
      /**
       */
      public boolean hasBlockpermalockResult() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       */
      public boolean getBlockpermalockResult() {
        return blockpermalockResult_;
      }
      /**
       */
      public Builder setBlockpermalockResult(boolean value) {
        bitField0_ |= 0x00001000;
        blockpermalockResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearBlockpermalockResult() {
        bitField0_ = (bitField0_ & ~0x00001000);
        blockpermalockResult_ = false;
        onChanged();
        return this;
      }

      // optional bool kill_tag_result = 18;
      private boolean killTagResult_ ;
      /**
       */
      public boolean hasKillTagResult() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       */
      public boolean getKillTagResult() {
        return killTagResult_;
      }
      /**
       */
      public Builder setKillTagResult(boolean value) {
        bitField0_ |= 0x00002000;
        killTagResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearKillTagResult() {
        bitField0_ = (bitField0_ & ~0x00002000);
        killTagResult_ = false;
        onChanged();
        return this;
      }

      // optional bool pc_word_result = 20;
      private boolean pcWordResult_ ;
      /**
       */
      public boolean hasPcWordResult() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       */
      public boolean getPcWordResult() {
        return pcWordResult_;
      }
      /**
       */
      public Builder setPcWordResult(boolean value) {
        bitField0_ |= 0x00004000;
        pcWordResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearPcWordResult() {
        bitField0_ = (bitField0_ & ~0x00004000);
        pcWordResult_ = false;
        onChanged();
        return this;
      }

      // optional bool tag_specific_feature_config_result = 21;
      private boolean tagSpecificFeatureConfigResult_ ;
      /**
       */
      public boolean hasTagSpecificFeatureConfigResult() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       */
      public boolean getTagSpecificFeatureConfigResult() {
        return tagSpecificFeatureConfigResult_;
      }
      /**
       */
      public Builder setTagSpecificFeatureConfigResult(boolean value) {
        bitField0_ |= 0x00008000;
        tagSpecificFeatureConfigResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagSpecificFeatureConfigResult() {
        bitField0_ = (bitField0_ & ~0x00008000);
        tagSpecificFeatureConfigResult_ = false;
        onChanged();
        return this;
      }

      // optional bool tid_write_result = 22;
      private boolean tidWriteResult_ ;
      /**
       */
      public boolean hasTidWriteResult() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       */
      public boolean getTidWriteResult() {
        return tidWriteResult_;
      }
      /**
       */
      public Builder setTidWriteResult(boolean value) {
        bitField0_ |= 0x00010000;
        tidWriteResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTidWriteResult() {
        bitField0_ = (bitField0_ & ~0x00010000);
        tidWriteResult_ = false;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.Timestamp timestamp = 13;
      private com.impinj.stp.StpApi.Timestamp timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> timestampBuilder_;
      /**
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getTimestamp() {
        if (timestampBuilder_ == null) {
          return timestamp_;
        } else {
          return timestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          timestamp_ = value;
          onChanged();
        } else {
          timestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder setTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (timestampBuilder_ == null) {
          timestamp_ = builderForValue.build();
          onChanged();
        } else {
          timestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder mergeTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000) &&
              timestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            timestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
          } else {
            timestamp_ = value;
          }
          onChanged();
        } else {
          timestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder clearTimestamp() {
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getTimestampBuilder() {
        bitField0_ |= 0x00020000;
        onChanged();
        return getTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
        if (timestampBuilder_ != null) {
          return timestampBuilder_.getMessageOrBuilder();
        } else {
          return timestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getTimestampFieldBuilder() {
        if (timestampBuilder_ == null) {
          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  timestamp_,
                  getParentForChildren(),
                  isClean());
          timestamp_ = null;
        }
        return timestampBuilder_;
      }

      // optional uint32 antenna_ID = 14;
      private int antennaID_ ;
      /**
       */
      public boolean hasAntennaID() {
        return ((bitField0_ & 0x00040000) == 0x00040000);
      }
      /**
       */
      public int getAntennaID() {
        return antennaID_;
      }
      /**
       */
      public Builder setAntennaID(int value) {
        bitField0_ |= 0x00040000;
        antennaID_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearAntennaID() {
        bitField0_ = (bitField0_ & ~0x00040000);
        antennaID_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 frequency = 15;
      private int frequency_ ;
      /**
       *
       * Units are kHz
       */
      public boolean hasFrequency() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       *
       * Units are kHz
       */
      public int getFrequency() {
        return frequency_;
      }
      /**
       *
       * Units are kHz
       */
      public Builder setFrequency(int value) {
        bitField0_ |= 0x00080000;
        frequency_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Units are kHz
       */
      public Builder clearFrequency() {
        bitField0_ = (bitField0_ & ~0x00080000);
        frequency_ = 0;
        onChanged();
        return this;
      }

      // optional sint32 RSSI = 16;
      private int rSSI_ ;
      /**
       *
       * RSSI of the Ack response (EPC) in units of dBm * 100.
       */
      public boolean hasRSSI() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       *
       * RSSI of the Ack response (EPC) in units of dBm * 100.
       */
      public int getRSSI() {
        return rSSI_;
      }
      /**
       *
       * RSSI of the Ack response (EPC) in units of dBm * 100.
       */
      public Builder setRSSI(int value) {
        bitField0_ |= 0x00100000;
        rSSI_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * RSSI of the Ack response (EPC) in units of dBm * 100.
       */
      public Builder clearRSSI() {
        bitField0_ = (bitField0_ & ~0x00100000);
        rSSI_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 job_id = 17;
      private int jobId_ ;
      /**
       */
      public boolean hasJobId() {
        return ((bitField0_ & 0x00200000) == 0x00200000);
      }
      /**
       */
      public int getJobId() {
        return jobId_;
      }
      /**
       */
      public Builder setJobId(int value) {
        bitField0_ |= 0x00200000;
        jobId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearJobId() {
        bitField0_ = (bitField0_ & ~0x00200000);
        jobId_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TagOperationReport)
    }

    static {
      defaultInstance = new TagOperationReport(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TagOperationReport)
  }

  public interface CartonContentsTagOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes tid = 1;
    /**
     */
    boolean hasTid();
    /**
     */
    com.google.protobuf.ByteString getTid();

    // optional bytes epc = 2;
    /**
     */
    boolean hasEpc();
    /**
     */
    com.google.protobuf.ByteString getEpc();

    // optional uint32 confidence = 3;
    /**
     *
     * Confidence is given as a value between 0 and 100 (inclusive)
     * to indicate whether the given tag is in the carton for which
     * this report corresponds
     */
    boolean hasConfidence();
    /**
     *
     * Confidence is given as a value between 0 and 100 (inclusive)
     * to indicate whether the given tag is in the carton for which
     * this report corresponds
     */
    int getConfidence();

    // optional uint32 metric_1 = 4;
    /**
     *
     * A metric to add color to the confidence
     */
    boolean hasMetric1();
    /**
     *
     * A metric to add color to the confidence
     */
    int getMetric1();

    // optional uint32 metric_2 = 5;
    /**
     *
     * A metric to add color to the confidence
     */
    boolean hasMetric2();
    /**
     *
     * A metric to add color to the confidence
     */
    int getMetric2();

    // optional uint32 metric_3 = 6;
    /**
     *
     * A metric to add color to the confidence
     */
    boolean hasMetric3();
    /**
     *
     * A metric to add color to the confidence
     */
    int getMetric3();
  }
  /**
   * Protobuf type {@code Impinj.STP.CartonContentsTag}
   */
  public static final class CartonContentsTag extends
      com.google.protobuf.GeneratedMessage
      implements CartonContentsTagOrBuilder {
    // Use CartonContentsTag.newBuilder() to construct.
    private CartonContentsTag(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CartonContentsTag(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final CartonContentsTag defaultInstance;
    public static CartonContentsTag getDefaultInstance() {
      return defaultInstance;
    }

    public CartonContentsTag getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CartonContentsTag(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              tid_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              epc_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              confidence_ = input.readUInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              metric1_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              metric2_ = input.readUInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              metric3_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsTag_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsTag_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.CartonContentsTag.class, com.impinj.stp.StpApi.CartonContentsTag.Builder.class);
    }

    public static com.google.protobuf.Parser<CartonContentsTag> PARSER =
        new com.google.protobuf.AbstractParser<CartonContentsTag>() {
      public CartonContentsTag parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CartonContentsTag(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<CartonContentsTag> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes tid = 1;
    public static final int TID_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString tid_;
    /**
     */
    public boolean hasTid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.google.protobuf.ByteString getTid() {
      return tid_;
    }

    // optional bytes epc = 2;
    public static final int EPC_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString epc_;
    /**
     */
    public boolean hasEpc() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.google.protobuf.ByteString getEpc() {
      return epc_;
    }

    // optional uint32 confidence = 3;
    public static final int CONFIDENCE_FIELD_NUMBER = 3;
    private int confidence_;
    /**
     *
     * Confidence is given as a value between 0 and 100 (inclusive)
     * to indicate whether the given tag is in the carton for which
     * this report corresponds
     */
    public boolean hasConfidence() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Confidence is given as a value between 0 and 100 (inclusive)
     * to indicate whether the given tag is in the carton for which
     * this report corresponds
     */
    public int getConfidence() {
      return confidence_;
    }

    // optional uint32 metric_1 = 4;
    public static final int METRIC_1_FIELD_NUMBER = 4;
    private int metric1_;
    /**
     *
     * A metric to add color to the confidence
     */
    public boolean hasMetric1() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * A metric to add color to the confidence
     */
    public int getMetric1() {
      return metric1_;
    }

    // optional uint32 metric_2 = 5;
    public static final int METRIC_2_FIELD_NUMBER = 5;
    private int metric2_;
    /**
     *
     * A metric to add color to the confidence
     */
    public boolean hasMetric2() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * A metric to add color to the confidence
     */
    public int getMetric2() {
      return metric2_;
    }

    // optional uint32 metric_3 = 6;
    public static final int METRIC_3_FIELD_NUMBER = 6;
    private int metric3_;
    /**
     *
     * A metric to add color to the confidence
     */
    public boolean hasMetric3() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * A metric to add color to the confidence
     */
    public int getMetric3() {
      return metric3_;
    }

    private void initFields() {
      tid_ = com.google.protobuf.ByteString.EMPTY;
      epc_ = com.google.protobuf.ByteString.EMPTY;
      confidence_ = 0;
      metric1_ = 0;
      metric2_ = 0;
      metric3_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, tid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, epc_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(3, confidence_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, metric1_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt32(5, metric2_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt32(6, metric3_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, tid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, epc_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, confidence_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, metric1_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, metric2_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, metric3_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsTag parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.CartonContentsTag prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.CartonContentsTag}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.CartonContentsTagOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsTag_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsTag_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.CartonContentsTag.class, com.impinj.stp.StpApi.CartonContentsTag.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.CartonContentsTag.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        tid_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        epc_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        confidence_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        metric1_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        metric2_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        metric3_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsTag_descriptor;
      }

      public com.impinj.stp.StpApi.CartonContentsTag getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.CartonContentsTag.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.CartonContentsTag build() {
        com.impinj.stp.StpApi.CartonContentsTag result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.CartonContentsTag buildPartial() {
        com.impinj.stp.StpApi.CartonContentsTag result = new com.impinj.stp.StpApi.CartonContentsTag(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tid_ = tid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.epc_ = epc_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.confidence_ = confidence_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.metric1_ = metric1_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.metric2_ = metric2_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.metric3_ = metric3_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.CartonContentsTag) {
          return mergeFrom((com.impinj.stp.StpApi.CartonContentsTag)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.CartonContentsTag other) {
        if (other == com.impinj.stp.StpApi.CartonContentsTag.getDefaultInstance()) return this;
        if (other.hasTid()) {
          setTid(other.getTid());
        }
        if (other.hasEpc()) {
          setEpc(other.getEpc());
        }
        if (other.hasConfidence()) {
          setConfidence(other.getConfidence());
        }
        if (other.hasMetric1()) {
          setMetric1(other.getMetric1());
        }
        if (other.hasMetric2()) {
          setMetric2(other.getMetric2());
        }
        if (other.hasMetric3()) {
          setMetric3(other.getMetric3());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.CartonContentsTag parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.CartonContentsTag) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes tid = 1;
      private com.google.protobuf.ByteString tid_ = com.google.protobuf.ByteString.EMPTY;
      /**
       */
      public boolean hasTid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.google.protobuf.ByteString getTid() {
        return tid_;
      }
      /**
       */
      public Builder setTid(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tid_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tid_ = getDefaultInstance().getTid();
        onChanged();
        return this;
      }

      // optional bytes epc = 2;
      private com.google.protobuf.ByteString epc_ = com.google.protobuf.ByteString.EMPTY;
      /**
       */
      public boolean hasEpc() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.google.protobuf.ByteString getEpc() {
        return epc_;
      }
      /**
       */
      public Builder setEpc(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        epc_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearEpc() {
        bitField0_ = (bitField0_ & ~0x00000002);
        epc_ = getDefaultInstance().getEpc();
        onChanged();
        return this;
      }

      // optional uint32 confidence = 3;
      private int confidence_ ;
      /**
       *
       * Confidence is given as a value between 0 and 100 (inclusive)
       * to indicate whether the given tag is in the carton for which
       * this report corresponds
       */
      public boolean hasConfidence() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Confidence is given as a value between 0 and 100 (inclusive)
       * to indicate whether the given tag is in the carton for which
       * this report corresponds
       */
      public int getConfidence() {
        return confidence_;
      }
      /**
       *
       * Confidence is given as a value between 0 and 100 (inclusive)
       * to indicate whether the given tag is in the carton for which
       * this report corresponds
       */
      public Builder setConfidence(int value) {
        bitField0_ |= 0x00000004;
        confidence_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Confidence is given as a value between 0 and 100 (inclusive)
       * to indicate whether the given tag is in the carton for which
       * this report corresponds
       */
      public Builder clearConfidence() {
        bitField0_ = (bitField0_ & ~0x00000004);
        confidence_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 metric_1 = 4;
      private int metric1_ ;
      /**
       *
       * A metric to add color to the confidence
       */
      public boolean hasMetric1() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public int getMetric1() {
        return metric1_;
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public Builder setMetric1(int value) {
        bitField0_ |= 0x00000008;
        metric1_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public Builder clearMetric1() {
        bitField0_ = (bitField0_ & ~0x00000008);
        metric1_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 metric_2 = 5;
      private int metric2_ ;
      /**
       *
       * A metric to add color to the confidence
       */
      public boolean hasMetric2() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public int getMetric2() {
        return metric2_;
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public Builder setMetric2(int value) {
        bitField0_ |= 0x00000010;
        metric2_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public Builder clearMetric2() {
        bitField0_ = (bitField0_ & ~0x00000010);
        metric2_ = 0;
        onChanged();
        return this;
      }

      // optional uint32 metric_3 = 6;
      private int metric3_ ;
      /**
       *
       * A metric to add color to the confidence
       */
      public boolean hasMetric3() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public int getMetric3() {
        return metric3_;
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public Builder setMetric3(int value) {
        bitField0_ |= 0x00000020;
        metric3_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * A metric to add color to the confidence
       */
      public Builder clearMetric3() {
        bitField0_ = (bitField0_ & ~0x00000020);
        metric3_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.CartonContentsTag)
    }

    static {
      defaultInstance = new CartonContentsTag(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.CartonContentsTag)
  }

  public interface CartonContentsReportOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.CartonContentsResult carton_contents_result = 1;
    /**
     */
    boolean hasCartonContentsResult();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsResult getCartonContentsResult();

    // optional .Impinj.STP.Timestamp enter_timestamp = 5;
    /**
     *
     * Timestamp of the start trigger
     */
    boolean hasEnterTimestamp();
    /**
     *
     * Timestamp of the start trigger
     */
    com.impinj.stp.StpApi.Timestamp getEnterTimestamp();
    /**
     *
     * Timestamp of the start trigger
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getEnterTimestampOrBuilder();

    // optional .Impinj.STP.Timestamp exit_timestamp = 6;
    /**
     *
     * Timestamp of the stop trigger
     */
    boolean hasExitTimestamp();
    /**
     *
     * Timestamp of the stop trigger
     */
    com.impinj.stp.StpApi.Timestamp getExitTimestamp();
    /**
     *
     * Timestamp of the stop trigger
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getExitTimestampOrBuilder();

    // optional uint32 carton_size = 7;
    /**
     *
     * Detected carton size in millimeters
     */
    boolean hasCartonSize();
    /**
     *
     * Detected carton size in millimeters
     */
    int getCartonSize();

    // repeated .Impinj.STP.CartonContentsTag carton_contents_tag = 4;
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    java.util.List<com.impinj.stp.StpApi.CartonContentsTag> 
        getCartonContentsTagList();
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    com.impinj.stp.StpApi.CartonContentsTag getCartonContentsTag(int index);
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    int getCartonContentsTagCount();
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    java.util.List<? extends com.impinj.stp.StpApi.CartonContentsTagOrBuilder> 
        getCartonContentsTagOrBuilderList();
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    com.impinj.stp.StpApi.CartonContentsTagOrBuilder getCartonContentsTagOrBuilder(
        int index);

    // repeated .Impinj.STP.CartonContentsError carton_contents_error = 8;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.CartonContentsError> 
        getCartonContentsErrorList();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsError getCartonContentsError(int index);
    /**
     */
    int getCartonContentsErrorCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.CartonContentsErrorOrBuilder> 
        getCartonContentsErrorOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsErrorOrBuilder getCartonContentsErrorOrBuilder(
        int index);

    // optional .Impinj.STP.Timestamp start_timestamp = 2;
    /**
     *
     * DEPRECATED
     */
    boolean hasStartTimestamp();
    /**
     *
     * DEPRECATED
     */
    com.impinj.stp.StpApi.Timestamp getStartTimestamp();
    /**
     *
     * DEPRECATED
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getStartTimestampOrBuilder();

    // optional .Impinj.STP.Timestamp stop_timestamp = 3;
    /**
     *
     * DEPRECATED
     */
    boolean hasStopTimestamp();
    /**
     *
     * DEPRECATED
     */
    com.impinj.stp.StpApi.Timestamp getStopTimestamp();
    /**
     *
     * DEPRECATED
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getStopTimestampOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.CartonContentsReport}
   */
  public static final class CartonContentsReport extends
      com.google.protobuf.GeneratedMessage
      implements CartonContentsReportOrBuilder {
    // Use CartonContentsReport.newBuilder() to construct.
    private CartonContentsReport(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CartonContentsReport(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final CartonContentsReport defaultInstance;
    public static CartonContentsReport getDefaultInstance() {
      return defaultInstance;
    }

    public CartonContentsReport getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CartonContentsReport(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.CartonContentsResult value = com.impinj.stp.StpApi.CartonContentsResult.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                cartonContentsResult_ = value;
              }
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = startTimestamp_.toBuilder();
              }
              startTimestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(startTimestamp_);
                startTimestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = stopTimestamp_.toBuilder();
              }
              stopTimestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stopTimestamp_);
                stopTimestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                cartonContentsTag_ = new java.util.ArrayList<com.impinj.stp.StpApi.CartonContentsTag>();
                mutable_bitField0_ |= 0x00000010;
              }
              cartonContentsTag_.add(input.readMessage(com.impinj.stp.StpApi.CartonContentsTag.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = enterTimestamp_.toBuilder();
              }
              enterTimestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(enterTimestamp_);
                enterTimestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = exitTimestamp_.toBuilder();
              }
              exitTimestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(exitTimestamp_);
                exitTimestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 56: {
              bitField0_ |= 0x00000008;
              cartonSize_ = input.readUInt32();
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                cartonContentsError_ = new java.util.ArrayList<com.impinj.stp.StpApi.CartonContentsError>();
                mutable_bitField0_ |= 0x00000020;
              }
              cartonContentsError_.add(input.readMessage(com.impinj.stp.StpApi.CartonContentsError.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          cartonContentsTag_ = java.util.Collections.unmodifiableList(cartonContentsTag_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          cartonContentsError_ = java.util.Collections.unmodifiableList(cartonContentsError_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsReport_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsReport_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.CartonContentsReport.class, com.impinj.stp.StpApi.CartonContentsReport.Builder.class);
    }

    public static com.google.protobuf.Parser<CartonContentsReport> PARSER =
        new com.google.protobuf.AbstractParser<CartonContentsReport>() {
      public CartonContentsReport parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CartonContentsReport(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<CartonContentsReport> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.CartonContentsResult carton_contents_result = 1;
    public static final int CARTON_CONTENTS_RESULT_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.CartonContentsResult cartonContentsResult_;
    /**
     */
    public boolean hasCartonContentsResult() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsResult getCartonContentsResult() {
      return cartonContentsResult_;
    }

    // optional .Impinj.STP.Timestamp enter_timestamp = 5;
    public static final int ENTER_TIMESTAMP_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.Timestamp enterTimestamp_;
    /**
     *
     * Timestamp of the start trigger
     */
    public boolean hasEnterTimestamp() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Timestamp of the start trigger
     */
    public com.impinj.stp.StpApi.Timestamp getEnterTimestamp() {
      return enterTimestamp_;
    }
    /**
     *
     * Timestamp of the start trigger
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getEnterTimestampOrBuilder() {
      return enterTimestamp_;
    }

    // optional .Impinj.STP.Timestamp exit_timestamp = 6;
    public static final int EXIT_TIMESTAMP_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.Timestamp exitTimestamp_;
    /**
     *
     * Timestamp of the stop trigger
     */
    public boolean hasExitTimestamp() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Timestamp of the stop trigger
     */
    public com.impinj.stp.StpApi.Timestamp getExitTimestamp() {
      return exitTimestamp_;
    }
    /**
     *
     * Timestamp of the stop trigger
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getExitTimestampOrBuilder() {
      return exitTimestamp_;
    }

    // optional uint32 carton_size = 7;
    public static final int CARTON_SIZE_FIELD_NUMBER = 7;
    private int cartonSize_;
    /**
     *
     * Detected carton size in millimeters
     */
    public boolean hasCartonSize() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Detected carton size in millimeters
     */
    public int getCartonSize() {
      return cartonSize_;
    }

    // repeated .Impinj.STP.CartonContentsTag carton_contents_tag = 4;
    public static final int CARTON_CONTENTS_TAG_FIELD_NUMBER = 4;
    private java.util.List<com.impinj.stp.StpApi.CartonContentsTag> cartonContentsTag_;
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    public java.util.List<com.impinj.stp.StpApi.CartonContentsTag> getCartonContentsTagList() {
      return cartonContentsTag_;
    }
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    public java.util.List<? extends com.impinj.stp.StpApi.CartonContentsTagOrBuilder> 
        getCartonContentsTagOrBuilderList() {
      return cartonContentsTag_;
    }
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    public int getCartonContentsTagCount() {
      return cartonContentsTag_.size();
    }
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    public com.impinj.stp.StpApi.CartonContentsTag getCartonContentsTag(int index) {
      return cartonContentsTag_.get(index);
    }
    /**
     *
     * A list of all tags seen for the duration the carton was
     * between the entry and exit sensors.
     */
    public com.impinj.stp.StpApi.CartonContentsTagOrBuilder getCartonContentsTagOrBuilder(
        int index) {
      return cartonContentsTag_.get(index);
    }

    // repeated .Impinj.STP.CartonContentsError carton_contents_error = 8;
    public static final int CARTON_CONTENTS_ERROR_FIELD_NUMBER = 8;
    private java.util.List<com.impinj.stp.StpApi.CartonContentsError> cartonContentsError_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.CartonContentsError> getCartonContentsErrorList() {
      return cartonContentsError_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.CartonContentsErrorOrBuilder> 
        getCartonContentsErrorOrBuilderList() {
      return cartonContentsError_;
    }
    /**
     */
    public int getCartonContentsErrorCount() {
      return cartonContentsError_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsError getCartonContentsError(int index) {
      return cartonContentsError_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsErrorOrBuilder getCartonContentsErrorOrBuilder(
        int index) {
      return cartonContentsError_.get(index);
    }

    // optional .Impinj.STP.Timestamp start_timestamp = 2;
    public static final int START_TIMESTAMP_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.Timestamp startTimestamp_;
    /**
     *
     * DEPRECATED
     */
    public boolean hasStartTimestamp() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * DEPRECATED
     */
    public com.impinj.stp.StpApi.Timestamp getStartTimestamp() {
      return startTimestamp_;
    }
    /**
     *
     * DEPRECATED
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getStartTimestampOrBuilder() {
      return startTimestamp_;
    }

    // optional .Impinj.STP.Timestamp stop_timestamp = 3;
    public static final int STOP_TIMESTAMP_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.Timestamp stopTimestamp_;
    /**
     *
     * DEPRECATED
     */
    public boolean hasStopTimestamp() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     *
     * DEPRECATED
     */
    public com.impinj.stp.StpApi.Timestamp getStopTimestamp() {
      return stopTimestamp_;
    }
    /**
     *
     * DEPRECATED
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getStopTimestampOrBuilder() {
      return stopTimestamp_;
    }

    private void initFields() {
      cartonContentsResult_ = com.impinj.stp.StpApi.CartonContentsResult.CARTON_CONTENTS_RESULT_OK;
      enterTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      exitTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      cartonSize_ = 0;
      cartonContentsTag_ = java.util.Collections.emptyList();
      cartonContentsError_ = java.util.Collections.emptyList();
      startTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      stopTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, cartonContentsResult_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(2, startTimestamp_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(3, stopTimestamp_);
      }
      for (int i = 0; i < cartonContentsTag_.size(); i++) {
        output.writeMessage(4, cartonContentsTag_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(5, enterTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(6, exitTimestamp_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(7, cartonSize_);
      }
      for (int i = 0; i < cartonContentsError_.size(); i++) {
        output.writeMessage(8, cartonContentsError_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, cartonContentsResult_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, startTimestamp_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, stopTimestamp_);
      }
      for (int i = 0; i < cartonContentsTag_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, cartonContentsTag_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, enterTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, exitTimestamp_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, cartonSize_);
      }
      for (int i = 0; i < cartonContentsError_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, cartonContentsError_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsReport parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.CartonContentsReport prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.CartonContentsReport}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.CartonContentsReportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsReport_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsReport_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.CartonContentsReport.class, com.impinj.stp.StpApi.CartonContentsReport.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.CartonContentsReport.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getEnterTimestampFieldBuilder();
          getExitTimestampFieldBuilder();
          getCartonContentsTagFieldBuilder();
          getCartonContentsErrorFieldBuilder();
          getStartTimestampFieldBuilder();
          getStopTimestampFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        cartonContentsResult_ = com.impinj.stp.StpApi.CartonContentsResult.CARTON_CONTENTS_RESULT_OK;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (enterTimestampBuilder_ == null) {
          enterTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          enterTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (exitTimestampBuilder_ == null) {
          exitTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          exitTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        cartonSize_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (cartonContentsTagBuilder_ == null) {
          cartonContentsTag_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          cartonContentsTagBuilder_.clear();
        }
        if (cartonContentsErrorBuilder_ == null) {
          cartonContentsError_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          cartonContentsErrorBuilder_.clear();
        }
        if (startTimestampBuilder_ == null) {
          startTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          startTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (stopTimestampBuilder_ == null) {
          stopTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          stopTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsReport_descriptor;
      }

      public com.impinj.stp.StpApi.CartonContentsReport getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.CartonContentsReport.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.CartonContentsReport build() {
        com.impinj.stp.StpApi.CartonContentsReport result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.CartonContentsReport buildPartial() {
        com.impinj.stp.StpApi.CartonContentsReport result = new com.impinj.stp.StpApi.CartonContentsReport(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.cartonContentsResult_ = cartonContentsResult_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (enterTimestampBuilder_ == null) {
          result.enterTimestamp_ = enterTimestamp_;
        } else {
          result.enterTimestamp_ = enterTimestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (exitTimestampBuilder_ == null) {
          result.exitTimestamp_ = exitTimestamp_;
        } else {
          result.exitTimestamp_ = exitTimestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.cartonSize_ = cartonSize_;
        if (cartonContentsTagBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            cartonContentsTag_ = java.util.Collections.unmodifiableList(cartonContentsTag_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.cartonContentsTag_ = cartonContentsTag_;
        } else {
          result.cartonContentsTag_ = cartonContentsTagBuilder_.build();
        }
        if (cartonContentsErrorBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            cartonContentsError_ = java.util.Collections.unmodifiableList(cartonContentsError_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.cartonContentsError_ = cartonContentsError_;
        } else {
          result.cartonContentsError_ = cartonContentsErrorBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        if (startTimestampBuilder_ == null) {
          result.startTimestamp_ = startTimestamp_;
        } else {
          result.startTimestamp_ = startTimestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        if (stopTimestampBuilder_ == null) {
          result.stopTimestamp_ = stopTimestamp_;
        } else {
          result.stopTimestamp_ = stopTimestampBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.CartonContentsReport) {
          return mergeFrom((com.impinj.stp.StpApi.CartonContentsReport)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.CartonContentsReport other) {
        if (other == com.impinj.stp.StpApi.CartonContentsReport.getDefaultInstance()) return this;
        if (other.hasCartonContentsResult()) {
          setCartonContentsResult(other.getCartonContentsResult());
        }
        if (other.hasEnterTimestamp()) {
          mergeEnterTimestamp(other.getEnterTimestamp());
        }
        if (other.hasExitTimestamp()) {
          mergeExitTimestamp(other.getExitTimestamp());
        }
        if (other.hasCartonSize()) {
          setCartonSize(other.getCartonSize());
        }
        if (cartonContentsTagBuilder_ == null) {
          if (!other.cartonContentsTag_.isEmpty()) {
            if (cartonContentsTag_.isEmpty()) {
              cartonContentsTag_ = other.cartonContentsTag_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureCartonContentsTagIsMutable();
              cartonContentsTag_.addAll(other.cartonContentsTag_);
            }
            onChanged();
          }
        } else {
          if (!other.cartonContentsTag_.isEmpty()) {
            if (cartonContentsTagBuilder_.isEmpty()) {
              cartonContentsTagBuilder_.dispose();
              cartonContentsTagBuilder_ = null;
              cartonContentsTag_ = other.cartonContentsTag_;
              bitField0_ = (bitField0_ & ~0x00000010);
              cartonContentsTagBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCartonContentsTagFieldBuilder() : null;
            } else {
              cartonContentsTagBuilder_.addAllMessages(other.cartonContentsTag_);
            }
          }
        }
        if (cartonContentsErrorBuilder_ == null) {
          if (!other.cartonContentsError_.isEmpty()) {
            if (cartonContentsError_.isEmpty()) {
              cartonContentsError_ = other.cartonContentsError_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureCartonContentsErrorIsMutable();
              cartonContentsError_.addAll(other.cartonContentsError_);
            }
            onChanged();
          }
        } else {
          if (!other.cartonContentsError_.isEmpty()) {
            if (cartonContentsErrorBuilder_.isEmpty()) {
              cartonContentsErrorBuilder_.dispose();
              cartonContentsErrorBuilder_ = null;
              cartonContentsError_ = other.cartonContentsError_;
              bitField0_ = (bitField0_ & ~0x00000020);
              cartonContentsErrorBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCartonContentsErrorFieldBuilder() : null;
            } else {
              cartonContentsErrorBuilder_.addAllMessages(other.cartonContentsError_);
            }
          }
        }
        if (other.hasStartTimestamp()) {
          mergeStartTimestamp(other.getStartTimestamp());
        }
        if (other.hasStopTimestamp()) {
          mergeStopTimestamp(other.getStopTimestamp());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.CartonContentsReport parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.CartonContentsReport) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.CartonContentsResult carton_contents_result = 1;
      private com.impinj.stp.StpApi.CartonContentsResult cartonContentsResult_ = com.impinj.stp.StpApi.CartonContentsResult.CARTON_CONTENTS_RESULT_OK;
      /**
       */
      public boolean hasCartonContentsResult() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsResult getCartonContentsResult() {
        return cartonContentsResult_;
      }
      /**
       */
      public Builder setCartonContentsResult(com.impinj.stp.StpApi.CartonContentsResult value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        cartonContentsResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearCartonContentsResult() {
        bitField0_ = (bitField0_ & ~0x00000001);
        cartonContentsResult_ = com.impinj.stp.StpApi.CartonContentsResult.CARTON_CONTENTS_RESULT_OK;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.Timestamp enter_timestamp = 5;
      private com.impinj.stp.StpApi.Timestamp enterTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> enterTimestampBuilder_;
      /**
       *
       * Timestamp of the start trigger
       */
      public boolean hasEnterTimestamp() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Timestamp of the start trigger
       */
      public com.impinj.stp.StpApi.Timestamp getEnterTimestamp() {
        if (enterTimestampBuilder_ == null) {
          return enterTimestamp_;
        } else {
          return enterTimestampBuilder_.getMessage();
        }
      }
      /**
       *
       * Timestamp of the start trigger
       */
      public Builder setEnterTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (enterTimestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          enterTimestamp_ = value;
          onChanged();
        } else {
          enterTimestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Timestamp of the start trigger
       */
      public Builder setEnterTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (enterTimestampBuilder_ == null) {
          enterTimestamp_ = builderForValue.build();
          onChanged();
        } else {
          enterTimestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Timestamp of the start trigger
       */
      public Builder mergeEnterTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (enterTimestampBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              enterTimestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            enterTimestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(enterTimestamp_).mergeFrom(value).buildPartial();
          } else {
            enterTimestamp_ = value;
          }
          onChanged();
        } else {
          enterTimestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Timestamp of the start trigger
       */
      public Builder clearEnterTimestamp() {
        if (enterTimestampBuilder_ == null) {
          enterTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          enterTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       *
       * Timestamp of the start trigger
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getEnterTimestampBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getEnterTimestampFieldBuilder().getBuilder();
      }
      /**
       *
       * Timestamp of the start trigger
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getEnterTimestampOrBuilder() {
        if (enterTimestampBuilder_ != null) {
          return enterTimestampBuilder_.getMessageOrBuilder();
        } else {
          return enterTimestamp_;
        }
      }
      /**
       *
       * Timestamp of the start trigger
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getEnterTimestampFieldBuilder() {
        if (enterTimestampBuilder_ == null) {
          enterTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  enterTimestamp_,
                  getParentForChildren(),
                  isClean());
          enterTimestamp_ = null;
        }
        return enterTimestampBuilder_;
      }

      // optional .Impinj.STP.Timestamp exit_timestamp = 6;
      private com.impinj.stp.StpApi.Timestamp exitTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> exitTimestampBuilder_;
      /**
       *
       * Timestamp of the stop trigger
       */
      public boolean hasExitTimestamp() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      public com.impinj.stp.StpApi.Timestamp getExitTimestamp() {
        if (exitTimestampBuilder_ == null) {
          return exitTimestamp_;
        } else {
          return exitTimestampBuilder_.getMessage();
        }
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      public Builder setExitTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (exitTimestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          exitTimestamp_ = value;
          onChanged();
        } else {
          exitTimestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      public Builder setExitTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (exitTimestampBuilder_ == null) {
          exitTimestamp_ = builderForValue.build();
          onChanged();
        } else {
          exitTimestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      public Builder mergeExitTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (exitTimestampBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              exitTimestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            exitTimestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(exitTimestamp_).mergeFrom(value).buildPartial();
          } else {
            exitTimestamp_ = value;
          }
          onChanged();
        } else {
          exitTimestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      public Builder clearExitTimestamp() {
        if (exitTimestampBuilder_ == null) {
          exitTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          exitTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getExitTimestampBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getExitTimestampFieldBuilder().getBuilder();
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getExitTimestampOrBuilder() {
        if (exitTimestampBuilder_ != null) {
          return exitTimestampBuilder_.getMessageOrBuilder();
        } else {
          return exitTimestamp_;
        }
      }
      /**
       *
       * Timestamp of the stop trigger
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getExitTimestampFieldBuilder() {
        if (exitTimestampBuilder_ == null) {
          exitTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  exitTimestamp_,
                  getParentForChildren(),
                  isClean());
          exitTimestamp_ = null;
        }
        return exitTimestampBuilder_;
      }

      // optional uint32 carton_size = 7;
      private int cartonSize_ ;
      /**
       *
       * Detected carton size in millimeters
       */
      public boolean hasCartonSize() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Detected carton size in millimeters
       */
      public int getCartonSize() {
        return cartonSize_;
      }
      /**
       *
       * Detected carton size in millimeters
       */
      public Builder setCartonSize(int value) {
        bitField0_ |= 0x00000008;
        cartonSize_ = value;
        onChanged();
        return this;
      }
      /**
       *
       * Detected carton size in millimeters
       */
      public Builder clearCartonSize() {
        bitField0_ = (bitField0_ & ~0x00000008);
        cartonSize_ = 0;
        onChanged();
        return this;
      }

      // repeated .Impinj.STP.CartonContentsTag carton_contents_tag = 4;
      private java.util.List<com.impinj.stp.StpApi.CartonContentsTag> cartonContentsTag_ =
        java.util.Collections.emptyList();
      private void ensureCartonContentsTagIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          cartonContentsTag_ = new java.util.ArrayList<com.impinj.stp.StpApi.CartonContentsTag>(cartonContentsTag_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsTag, com.impinj.stp.StpApi.CartonContentsTag.Builder, com.impinj.stp.StpApi.CartonContentsTagOrBuilder> cartonContentsTagBuilder_;

      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public java.util.List<com.impinj.stp.StpApi.CartonContentsTag> getCartonContentsTagList() {
        if (cartonContentsTagBuilder_ == null) {
          return java.util.Collections.unmodifiableList(cartonContentsTag_);
        } else {
          return cartonContentsTagBuilder_.getMessageList();
        }
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public int getCartonContentsTagCount() {
        if (cartonContentsTagBuilder_ == null) {
          return cartonContentsTag_.size();
        } else {
          return cartonContentsTagBuilder_.getCount();
        }
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public com.impinj.stp.StpApi.CartonContentsTag getCartonContentsTag(int index) {
        if (cartonContentsTagBuilder_ == null) {
          return cartonContentsTag_.get(index);
        } else {
          return cartonContentsTagBuilder_.getMessage(index);
        }
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder setCartonContentsTag(
          int index, com.impinj.stp.StpApi.CartonContentsTag value) {
        if (cartonContentsTagBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCartonContentsTagIsMutable();
          cartonContentsTag_.set(index, value);
          onChanged();
        } else {
          cartonContentsTagBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder setCartonContentsTag(
          int index, com.impinj.stp.StpApi.CartonContentsTag.Builder builderForValue) {
        if (cartonContentsTagBuilder_ == null) {
          ensureCartonContentsTagIsMutable();
          cartonContentsTag_.set(index, builderForValue.build());
          onChanged();
        } else {
          cartonContentsTagBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder addCartonContentsTag(com.impinj.stp.StpApi.CartonContentsTag value) {
        if (cartonContentsTagBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCartonContentsTagIsMutable();
          cartonContentsTag_.add(value);
          onChanged();
        } else {
          cartonContentsTagBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder addCartonContentsTag(
          int index, com.impinj.stp.StpApi.CartonContentsTag value) {
        if (cartonContentsTagBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCartonContentsTagIsMutable();
          cartonContentsTag_.add(index, value);
          onChanged();
        } else {
          cartonContentsTagBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder addCartonContentsTag(
          com.impinj.stp.StpApi.CartonContentsTag.Builder builderForValue) {
        if (cartonContentsTagBuilder_ == null) {
          ensureCartonContentsTagIsMutable();
          cartonContentsTag_.add(builderForValue.build());
          onChanged();
        } else {
          cartonContentsTagBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder addCartonContentsTag(
          int index, com.impinj.stp.StpApi.CartonContentsTag.Builder builderForValue) {
        if (cartonContentsTagBuilder_ == null) {
          ensureCartonContentsTagIsMutable();
          cartonContentsTag_.add(index, builderForValue.build());
          onChanged();
        } else {
          cartonContentsTagBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder addAllCartonContentsTag(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.CartonContentsTag> values) {
        if (cartonContentsTagBuilder_ == null) {
          ensureCartonContentsTagIsMutable();
          super.addAll(values, cartonContentsTag_);
          onChanged();
        } else {
          cartonContentsTagBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder clearCartonContentsTag() {
        if (cartonContentsTagBuilder_ == null) {
          cartonContentsTag_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          cartonContentsTagBuilder_.clear();
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public Builder removeCartonContentsTag(int index) {
        if (cartonContentsTagBuilder_ == null) {
          ensureCartonContentsTagIsMutable();
          cartonContentsTag_.remove(index);
          onChanged();
        } else {
          cartonContentsTagBuilder_.remove(index);
        }
        return this;
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public com.impinj.stp.StpApi.CartonContentsTag.Builder getCartonContentsTagBuilder(
          int index) {
        return getCartonContentsTagFieldBuilder().getBuilder(index);
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public com.impinj.stp.StpApi.CartonContentsTagOrBuilder getCartonContentsTagOrBuilder(
          int index) {
        if (cartonContentsTagBuilder_ == null) {
          return cartonContentsTag_.get(index);  } else {
          return cartonContentsTagBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public java.util.List<? extends com.impinj.stp.StpApi.CartonContentsTagOrBuilder> 
           getCartonContentsTagOrBuilderList() {
        if (cartonContentsTagBuilder_ != null) {
          return cartonContentsTagBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(cartonContentsTag_);
        }
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public com.impinj.stp.StpApi.CartonContentsTag.Builder addCartonContentsTagBuilder() {
        return getCartonContentsTagFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.CartonContentsTag.getDefaultInstance());
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public com.impinj.stp.StpApi.CartonContentsTag.Builder addCartonContentsTagBuilder(
          int index) {
        return getCartonContentsTagFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.CartonContentsTag.getDefaultInstance());
      }
      /**
       *
       * A list of all tags seen for the duration the carton was
       * between the entry and exit sensors.
       */
      public java.util.List<com.impinj.stp.StpApi.CartonContentsTag.Builder> 
           getCartonContentsTagBuilderList() {
        return getCartonContentsTagFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsTag, com.impinj.stp.StpApi.CartonContentsTag.Builder, com.impinj.stp.StpApi.CartonContentsTagOrBuilder> 
          getCartonContentsTagFieldBuilder() {
        if (cartonContentsTagBuilder_ == null) {
          cartonContentsTagBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.CartonContentsTag, com.impinj.stp.StpApi.CartonContentsTag.Builder, com.impinj.stp.StpApi.CartonContentsTagOrBuilder>(
                  cartonContentsTag_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          cartonContentsTag_ = null;
        }
        return cartonContentsTagBuilder_;
      }

      // repeated .Impinj.STP.CartonContentsError carton_contents_error = 8;
      private java.util.List<com.impinj.stp.StpApi.CartonContentsError> cartonContentsError_ =
        java.util.Collections.emptyList();
      private void ensureCartonContentsErrorIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          cartonContentsError_ = new java.util.ArrayList<com.impinj.stp.StpApi.CartonContentsError>(cartonContentsError_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsError, com.impinj.stp.StpApi.CartonContentsError.Builder, com.impinj.stp.StpApi.CartonContentsErrorOrBuilder> cartonContentsErrorBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.CartonContentsError> getCartonContentsErrorList() {
        if (cartonContentsErrorBuilder_ == null) {
          return java.util.Collections.unmodifiableList(cartonContentsError_);
        } else {
          return cartonContentsErrorBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getCartonContentsErrorCount() {
        if (cartonContentsErrorBuilder_ == null) {
          return cartonContentsError_.size();
        } else {
          return cartonContentsErrorBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsError getCartonContentsError(int index) {
        if (cartonContentsErrorBuilder_ == null) {
          return cartonContentsError_.get(index);
        } else {
          return cartonContentsErrorBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setCartonContentsError(
          int index, com.impinj.stp.StpApi.CartonContentsError value) {
        if (cartonContentsErrorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCartonContentsErrorIsMutable();
          cartonContentsError_.set(index, value);
          onChanged();
        } else {
          cartonContentsErrorBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setCartonContentsError(
          int index, com.impinj.stp.StpApi.CartonContentsError.Builder builderForValue) {
        if (cartonContentsErrorBuilder_ == null) {
          ensureCartonContentsErrorIsMutable();
          cartonContentsError_.set(index, builderForValue.build());
          onChanged();
        } else {
          cartonContentsErrorBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addCartonContentsError(com.impinj.stp.StpApi.CartonContentsError value) {
        if (cartonContentsErrorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCartonContentsErrorIsMutable();
          cartonContentsError_.add(value);
          onChanged();
        } else {
          cartonContentsErrorBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addCartonContentsError(
          int index, com.impinj.stp.StpApi.CartonContentsError value) {
        if (cartonContentsErrorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCartonContentsErrorIsMutable();
          cartonContentsError_.add(index, value);
          onChanged();
        } else {
          cartonContentsErrorBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addCartonContentsError(
          com.impinj.stp.StpApi.CartonContentsError.Builder builderForValue) {
        if (cartonContentsErrorBuilder_ == null) {
          ensureCartonContentsErrorIsMutable();
          cartonContentsError_.add(builderForValue.build());
          onChanged();
        } else {
          cartonContentsErrorBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addCartonContentsError(
          int index, com.impinj.stp.StpApi.CartonContentsError.Builder builderForValue) {
        if (cartonContentsErrorBuilder_ == null) {
          ensureCartonContentsErrorIsMutable();
          cartonContentsError_.add(index, builderForValue.build());
          onChanged();
        } else {
          cartonContentsErrorBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllCartonContentsError(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.CartonContentsError> values) {
        if (cartonContentsErrorBuilder_ == null) {
          ensureCartonContentsErrorIsMutable();
          super.addAll(values, cartonContentsError_);
          onChanged();
        } else {
          cartonContentsErrorBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearCartonContentsError() {
        if (cartonContentsErrorBuilder_ == null) {
          cartonContentsError_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          cartonContentsErrorBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeCartonContentsError(int index) {
        if (cartonContentsErrorBuilder_ == null) {
          ensureCartonContentsErrorIsMutable();
          cartonContentsError_.remove(index);
          onChanged();
        } else {
          cartonContentsErrorBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsError.Builder getCartonContentsErrorBuilder(
          int index) {
        return getCartonContentsErrorFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsErrorOrBuilder getCartonContentsErrorOrBuilder(
          int index) {
        if (cartonContentsErrorBuilder_ == null) {
          return cartonContentsError_.get(index);  } else {
          return cartonContentsErrorBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.CartonContentsErrorOrBuilder> 
           getCartonContentsErrorOrBuilderList() {
        if (cartonContentsErrorBuilder_ != null) {
          return cartonContentsErrorBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(cartonContentsError_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsError.Builder addCartonContentsErrorBuilder() {
        return getCartonContentsErrorFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.CartonContentsError.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsError.Builder addCartonContentsErrorBuilder(
          int index) {
        return getCartonContentsErrorFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.CartonContentsError.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.CartonContentsError.Builder> 
           getCartonContentsErrorBuilderList() {
        return getCartonContentsErrorFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsError, com.impinj.stp.StpApi.CartonContentsError.Builder, com.impinj.stp.StpApi.CartonContentsErrorOrBuilder> 
          getCartonContentsErrorFieldBuilder() {
        if (cartonContentsErrorBuilder_ == null) {
          cartonContentsErrorBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.CartonContentsError, com.impinj.stp.StpApi.CartonContentsError.Builder, com.impinj.stp.StpApi.CartonContentsErrorOrBuilder>(
                  cartonContentsError_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          cartonContentsError_ = null;
        }
        return cartonContentsErrorBuilder_;
      }

      // optional .Impinj.STP.Timestamp start_timestamp = 2;
      private com.impinj.stp.StpApi.Timestamp startTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> startTimestampBuilder_;
      /**
       *
       * DEPRECATED
       */
      public boolean hasStartTimestamp() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       *
       * DEPRECATED
       */
      public com.impinj.stp.StpApi.Timestamp getStartTimestamp() {
        if (startTimestampBuilder_ == null) {
          return startTimestamp_;
        } else {
          return startTimestampBuilder_.getMessage();
        }
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setStartTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (startTimestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          startTimestamp_ = value;
          onChanged();
        } else {
          startTimestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setStartTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (startTimestampBuilder_ == null) {
          startTimestamp_ = builderForValue.build();
          onChanged();
        } else {
          startTimestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder mergeStartTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (startTimestampBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              startTimestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            startTimestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(startTimestamp_).mergeFrom(value).buildPartial();
          } else {
            startTimestamp_ = value;
          }
          onChanged();
        } else {
          startTimestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder clearStartTimestamp() {
        if (startTimestampBuilder_ == null) {
          startTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          startTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getStartTimestampBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getStartTimestampFieldBuilder().getBuilder();
      }
      /**
       *
       * DEPRECATED
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getStartTimestampOrBuilder() {
        if (startTimestampBuilder_ != null) {
          return startTimestampBuilder_.getMessageOrBuilder();
        } else {
          return startTimestamp_;
        }
      }
      /**
       *
       * DEPRECATED
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getStartTimestampFieldBuilder() {
        if (startTimestampBuilder_ == null) {
          startTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  startTimestamp_,
                  getParentForChildren(),
                  isClean());
          startTimestamp_ = null;
        }
        return startTimestampBuilder_;
      }

      // optional .Impinj.STP.Timestamp stop_timestamp = 3;
      private com.impinj.stp.StpApi.Timestamp stopTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> stopTimestampBuilder_;
      /**
       *
       * DEPRECATED
       */
      public boolean hasStopTimestamp() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       *
       * DEPRECATED
       */
      public com.impinj.stp.StpApi.Timestamp getStopTimestamp() {
        if (stopTimestampBuilder_ == null) {
          return stopTimestamp_;
        } else {
          return stopTimestampBuilder_.getMessage();
        }
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setStopTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (stopTimestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          stopTimestamp_ = value;
          onChanged();
        } else {
          stopTimestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder setStopTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (stopTimestampBuilder_ == null) {
          stopTimestamp_ = builderForValue.build();
          onChanged();
        } else {
          stopTimestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder mergeStopTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (stopTimestampBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              stopTimestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            stopTimestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(stopTimestamp_).mergeFrom(value).buildPartial();
          } else {
            stopTimestamp_ = value;
          }
          onChanged();
        } else {
          stopTimestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public Builder clearStopTimestamp() {
        if (stopTimestampBuilder_ == null) {
          stopTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          stopTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       *
       * DEPRECATED
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getStopTimestampBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getStopTimestampFieldBuilder().getBuilder();
      }
      /**
       *
       * DEPRECATED
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getStopTimestampOrBuilder() {
        if (stopTimestampBuilder_ != null) {
          return stopTimestampBuilder_.getMessageOrBuilder();
        } else {
          return stopTimestamp_;
        }
      }
      /**
       *
       * DEPRECATED
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getStopTimestampFieldBuilder() {
        if (stopTimestampBuilder_ == null) {
          stopTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  stopTimestamp_,
                  getParentForChildren(),
                  isClean());
          stopTimestamp_ = null;
        }
        return stopTimestampBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.CartonContentsReport)
    }

    static {
      defaultInstance = new CartonContentsReport(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.CartonContentsReport)
  }

  public interface CartonContentsErrorOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.CartonContentsErrorType error_type = 1;
    /**
     */
    boolean hasErrorType();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsErrorType getErrorType();

    // optional .Impinj.STP.Timestamp extra_timestamp = 2;
    /**
     */
    boolean hasExtraTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getExtraTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getExtraTimestampOrBuilder();

    // optional .Impinj.STP.Timestamp min_timestamp = 3;
    /**
     */
    boolean hasMinTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getMinTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getMinTimestampOrBuilder();

    // optional .Impinj.STP.Timestamp max_timestamp = 4;
    /**
     */
    boolean hasMaxTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getMaxTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getMaxTimestampOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.CartonContentsError}
   */
  public static final class CartonContentsError extends
      com.google.protobuf.GeneratedMessage
      implements CartonContentsErrorOrBuilder {
    // Use CartonContentsError.newBuilder() to construct.
    private CartonContentsError(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CartonContentsError(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final CartonContentsError defaultInstance;
    public static CartonContentsError getDefaultInstance() {
      return defaultInstance;
    }

    public CartonContentsError getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CartonContentsError(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.CartonContentsErrorType value = com.impinj.stp.StpApi.CartonContentsErrorType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                errorType_ = value;
              }
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = extraTimestamp_.toBuilder();
              }
              extraTimestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(extraTimestamp_);
                extraTimestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = minTimestamp_.toBuilder();
              }
              minTimestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(minTimestamp_);
                minTimestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = maxTimestamp_.toBuilder();
              }
              maxTimestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(maxTimestamp_);
                maxTimestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsError_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsError_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.CartonContentsError.class, com.impinj.stp.StpApi.CartonContentsError.Builder.class);
    }

    public static com.google.protobuf.Parser<CartonContentsError> PARSER =
        new com.google.protobuf.AbstractParser<CartonContentsError>() {
      public CartonContentsError parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CartonContentsError(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<CartonContentsError> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.CartonContentsErrorType error_type = 1;
    public static final int ERROR_TYPE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.CartonContentsErrorType errorType_;
    /**
     */
    public boolean hasErrorType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsErrorType getErrorType() {
      return errorType_;
    }

    // optional .Impinj.STP.Timestamp extra_timestamp = 2;
    public static final int EXTRA_TIMESTAMP_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.Timestamp extraTimestamp_;
    /**
     */
    public boolean hasExtraTimestamp() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getExtraTimestamp() {
      return extraTimestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getExtraTimestampOrBuilder() {
      return extraTimestamp_;
    }

    // optional .Impinj.STP.Timestamp min_timestamp = 3;
    public static final int MIN_TIMESTAMP_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.Timestamp minTimestamp_;
    /**
     */
    public boolean hasMinTimestamp() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getMinTimestamp() {
      return minTimestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getMinTimestampOrBuilder() {
      return minTimestamp_;
    }

    // optional .Impinj.STP.Timestamp max_timestamp = 4;
    public static final int MAX_TIMESTAMP_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.Timestamp maxTimestamp_;
    /**
     */
    public boolean hasMaxTimestamp() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getMaxTimestamp() {
      return maxTimestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getMaxTimestampOrBuilder() {
      return maxTimestamp_;
    }

    private void initFields() {
      errorType_ = com.impinj.stp.StpApi.CartonContentsErrorType.CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER;
      extraTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      minTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      maxTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, errorType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, extraTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, minTimestamp_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, maxTimestamp_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, errorType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, extraTimestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, minTimestamp_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, maxTimestamp_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.CartonContentsError parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.CartonContentsError prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.CartonContentsError}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.CartonContentsErrorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsError_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsError_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.CartonContentsError.class, com.impinj.stp.StpApi.CartonContentsError.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.CartonContentsError.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getExtraTimestampFieldBuilder();
          getMinTimestampFieldBuilder();
          getMaxTimestampFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        errorType_ = com.impinj.stp.StpApi.CartonContentsErrorType.CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (extraTimestampBuilder_ == null) {
          extraTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          extraTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (minTimestampBuilder_ == null) {
          minTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          minTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (maxTimestampBuilder_ == null) {
          maxTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          maxTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_CartonContentsError_descriptor;
      }

      public com.impinj.stp.StpApi.CartonContentsError getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.CartonContentsError.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.CartonContentsError build() {
        com.impinj.stp.StpApi.CartonContentsError result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.CartonContentsError buildPartial() {
        com.impinj.stp.StpApi.CartonContentsError result = new com.impinj.stp.StpApi.CartonContentsError(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.errorType_ = errorType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (extraTimestampBuilder_ == null) {
          result.extraTimestamp_ = extraTimestamp_;
        } else {
          result.extraTimestamp_ = extraTimestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (minTimestampBuilder_ == null) {
          result.minTimestamp_ = minTimestamp_;
        } else {
          result.minTimestamp_ = minTimestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (maxTimestampBuilder_ == null) {
          result.maxTimestamp_ = maxTimestamp_;
        } else {
          result.maxTimestamp_ = maxTimestampBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.CartonContentsError) {
          return mergeFrom((com.impinj.stp.StpApi.CartonContentsError)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.CartonContentsError other) {
        if (other == com.impinj.stp.StpApi.CartonContentsError.getDefaultInstance()) return this;
        if (other.hasErrorType()) {
          setErrorType(other.getErrorType());
        }
        if (other.hasExtraTimestamp()) {
          mergeExtraTimestamp(other.getExtraTimestamp());
        }
        if (other.hasMinTimestamp()) {
          mergeMinTimestamp(other.getMinTimestamp());
        }
        if (other.hasMaxTimestamp()) {
          mergeMaxTimestamp(other.getMaxTimestamp());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.CartonContentsError parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.CartonContentsError) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.CartonContentsErrorType error_type = 1;
      private com.impinj.stp.StpApi.CartonContentsErrorType errorType_ = com.impinj.stp.StpApi.CartonContentsErrorType.CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER;
      /**
       */
      public boolean hasErrorType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsErrorType getErrorType() {
        return errorType_;
      }
      /**
       */
      public Builder setErrorType(com.impinj.stp.StpApi.CartonContentsErrorType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        errorType_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearErrorType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        errorType_ = com.impinj.stp.StpApi.CartonContentsErrorType.CARTON_CONTENTS_ERROR_EXTRA_LEADING_ENTER;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.Timestamp extra_timestamp = 2;
      private com.impinj.stp.StpApi.Timestamp extraTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> extraTimestampBuilder_;
      /**
       */
      public boolean hasExtraTimestamp() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getExtraTimestamp() {
        if (extraTimestampBuilder_ == null) {
          return extraTimestamp_;
        } else {
          return extraTimestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setExtraTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (extraTimestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          extraTimestamp_ = value;
          onChanged();
        } else {
          extraTimestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setExtraTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (extraTimestampBuilder_ == null) {
          extraTimestamp_ = builderForValue.build();
          onChanged();
        } else {
          extraTimestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeExtraTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (extraTimestampBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              extraTimestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            extraTimestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(extraTimestamp_).mergeFrom(value).buildPartial();
          } else {
            extraTimestamp_ = value;
          }
          onChanged();
        } else {
          extraTimestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearExtraTimestamp() {
        if (extraTimestampBuilder_ == null) {
          extraTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          extraTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getExtraTimestampBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getExtraTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getExtraTimestampOrBuilder() {
        if (extraTimestampBuilder_ != null) {
          return extraTimestampBuilder_.getMessageOrBuilder();
        } else {
          return extraTimestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getExtraTimestampFieldBuilder() {
        if (extraTimestampBuilder_ == null) {
          extraTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  extraTimestamp_,
                  getParentForChildren(),
                  isClean());
          extraTimestamp_ = null;
        }
        return extraTimestampBuilder_;
      }

      // optional .Impinj.STP.Timestamp min_timestamp = 3;
      private com.impinj.stp.StpApi.Timestamp minTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> minTimestampBuilder_;
      /**
       */
      public boolean hasMinTimestamp() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getMinTimestamp() {
        if (minTimestampBuilder_ == null) {
          return minTimestamp_;
        } else {
          return minTimestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setMinTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (minTimestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          minTimestamp_ = value;
          onChanged();
        } else {
          minTimestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder setMinTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (minTimestampBuilder_ == null) {
          minTimestamp_ = builderForValue.build();
          onChanged();
        } else {
          minTimestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder mergeMinTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (minTimestampBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              minTimestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            minTimestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(minTimestamp_).mergeFrom(value).buildPartial();
          } else {
            minTimestamp_ = value;
          }
          onChanged();
        } else {
          minTimestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder clearMinTimestamp() {
        if (minTimestampBuilder_ == null) {
          minTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          minTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getMinTimestampBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getMinTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getMinTimestampOrBuilder() {
        if (minTimestampBuilder_ != null) {
          return minTimestampBuilder_.getMessageOrBuilder();
        } else {
          return minTimestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getMinTimestampFieldBuilder() {
        if (minTimestampBuilder_ == null) {
          minTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  minTimestamp_,
                  getParentForChildren(),
                  isClean());
          minTimestamp_ = null;
        }
        return minTimestampBuilder_;
      }

      // optional .Impinj.STP.Timestamp max_timestamp = 4;
      private com.impinj.stp.StpApi.Timestamp maxTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> maxTimestampBuilder_;
      /**
       */
      public boolean hasMaxTimestamp() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getMaxTimestamp() {
        if (maxTimestampBuilder_ == null) {
          return maxTimestamp_;
        } else {
          return maxTimestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setMaxTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (maxTimestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          maxTimestamp_ = value;
          onChanged();
        } else {
          maxTimestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setMaxTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (maxTimestampBuilder_ == null) {
          maxTimestamp_ = builderForValue.build();
          onChanged();
        } else {
          maxTimestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeMaxTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (maxTimestampBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              maxTimestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            maxTimestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(maxTimestamp_).mergeFrom(value).buildPartial();
          } else {
            maxTimestamp_ = value;
          }
          onChanged();
        } else {
          maxTimestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearMaxTimestamp() {
        if (maxTimestampBuilder_ == null) {
          maxTimestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          maxTimestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getMaxTimestampBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getMaxTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getMaxTimestampOrBuilder() {
        if (maxTimestampBuilder_ != null) {
          return maxTimestampBuilder_.getMessageOrBuilder();
        } else {
          return maxTimestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getMaxTimestampFieldBuilder() {
        if (maxTimestampBuilder_ == null) {
          maxTimestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  maxTimestamp_,
                  getParentForChildren(),
                  isClean());
          maxTimestamp_ = null;
        }
        return maxTimestampBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.CartonContentsError)
    }

    static {
      defaultInstance = new CartonContentsError(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.CartonContentsError)
  }

  public interface TagModeMetricsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint64 total_count = 1;
    /**
     */
    boolean hasTotalCount();
    /**
     */
    long getTotalCount();

    // optional uint64 pass_count = 2;
    /**
     */
    boolean hasPassCount();
    /**
     */
    long getPassCount();

    // optional uint64 fail_count = 3;
    /**
     */
    boolean hasFailCount();
    /**
     */
    long getFailCount();

    // optional uint64 void_count = 4;
    /**
     */
    boolean hasVoidCount();
    /**
     */
    long getVoidCount();
  }
  /**
   * Protobuf type {@code Impinj.STP.TagModeMetrics}
   */
  public static final class TagModeMetrics extends
      com.google.protobuf.GeneratedMessage
      implements TagModeMetricsOrBuilder {
    // Use TagModeMetrics.newBuilder() to construct.
    private TagModeMetrics(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TagModeMetrics(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TagModeMetrics defaultInstance;
    public static TagModeMetrics getDefaultInstance() {
      return defaultInstance;
    }

    public TagModeMetrics getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TagModeMetrics(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              totalCount_ = input.readUInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              passCount_ = input.readUInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              failCount_ = input.readUInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              voidCount_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagModeMetrics_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagModeMetrics_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TagModeMetrics.class, com.impinj.stp.StpApi.TagModeMetrics.Builder.class);
    }

    public static com.google.protobuf.Parser<TagModeMetrics> PARSER =
        new com.google.protobuf.AbstractParser<TagModeMetrics>() {
      public TagModeMetrics parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TagModeMetrics(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TagModeMetrics> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional uint64 total_count = 1;
    public static final int TOTAL_COUNT_FIELD_NUMBER = 1;
    private long totalCount_;
    /**
     */
    public boolean hasTotalCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public long getTotalCount() {
      return totalCount_;
    }

    // optional uint64 pass_count = 2;
    public static final int PASS_COUNT_FIELD_NUMBER = 2;
    private long passCount_;
    /**
     */
    public boolean hasPassCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public long getPassCount() {
      return passCount_;
    }

    // optional uint64 fail_count = 3;
    public static final int FAIL_COUNT_FIELD_NUMBER = 3;
    private long failCount_;
    /**
     */
    public boolean hasFailCount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public long getFailCount() {
      return failCount_;
    }

    // optional uint64 void_count = 4;
    public static final int VOID_COUNT_FIELD_NUMBER = 4;
    private long voidCount_;
    /**
     */
    public boolean hasVoidCount() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public long getVoidCount() {
      return voidCount_;
    }

    private void initFields() {
      totalCount_ = 0L;
      passCount_ = 0L;
      failCount_ = 0L;
      voidCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt64(1, totalCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(2, passCount_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(3, failCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt64(4, voidCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, totalCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, passCount_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, failCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, voidCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagModeMetrics parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TagModeMetrics prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TagModeMetrics}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TagModeMetricsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagModeMetrics_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagModeMetrics_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TagModeMetrics.class, com.impinj.stp.StpApi.TagModeMetrics.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TagModeMetrics.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        totalCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        passCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        failCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        voidCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagModeMetrics_descriptor;
      }

      public com.impinj.stp.StpApi.TagModeMetrics getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TagModeMetrics build() {
        com.impinj.stp.StpApi.TagModeMetrics result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TagModeMetrics buildPartial() {
        com.impinj.stp.StpApi.TagModeMetrics result = new com.impinj.stp.StpApi.TagModeMetrics(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.totalCount_ = totalCount_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.passCount_ = passCount_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.failCount_ = failCount_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.voidCount_ = voidCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TagModeMetrics) {
          return mergeFrom((com.impinj.stp.StpApi.TagModeMetrics)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TagModeMetrics other) {
        if (other == com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance()) return this;
        if (other.hasTotalCount()) {
          setTotalCount(other.getTotalCount());
        }
        if (other.hasPassCount()) {
          setPassCount(other.getPassCount());
        }
        if (other.hasFailCount()) {
          setFailCount(other.getFailCount());
        }
        if (other.hasVoidCount()) {
          setVoidCount(other.getVoidCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TagModeMetrics parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TagModeMetrics) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint64 total_count = 1;
      private long totalCount_ ;
      /**
       */
      public boolean hasTotalCount() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public long getTotalCount() {
        return totalCount_;
      }
      /**
       */
      public Builder setTotalCount(long value) {
        bitField0_ |= 0x00000001;
        totalCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTotalCount() {
        bitField0_ = (bitField0_ & ~0x00000001);
        totalCount_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 pass_count = 2;
      private long passCount_ ;
      /**
       */
      public boolean hasPassCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public long getPassCount() {
        return passCount_;
      }
      /**
       */
      public Builder setPassCount(long value) {
        bitField0_ |= 0x00000002;
        passCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearPassCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        passCount_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 fail_count = 3;
      private long failCount_ ;
      /**
       */
      public boolean hasFailCount() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public long getFailCount() {
        return failCount_;
      }
      /**
       */
      public Builder setFailCount(long value) {
        bitField0_ |= 0x00000004;
        failCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearFailCount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        failCount_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 void_count = 4;
      private long voidCount_ ;
      /**
       */
      public boolean hasVoidCount() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public long getVoidCount() {
        return voidCount_;
      }
      /**
       */
      public Builder setVoidCount(long value) {
        bitField0_ |= 0x00000008;
        voidCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearVoidCount() {
        bitField0_ = (bitField0_ & ~0x00000008);
        voidCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TagModeMetrics)
    }

    static {
      defaultInstance = new TagModeMetrics(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TagModeMetrics)
  }

  public interface TagMetricsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes tag_chip = 1;
    /**
     */
    boolean hasTagChip();
    /**
     */
    com.google.protobuf.ByteString getTagChip();

    // optional .Impinj.STP.TagModeMetrics verify_basic_metrics = 2;
    /**
     */
    boolean hasVerifyBasicMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetrics getVerifyBasicMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetricsOrBuilder getVerifyBasicMetricsOrBuilder();

    // optional .Impinj.STP.TagModeMetrics verify_data_metrics = 3;
    /**
     */
    boolean hasVerifyDataMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetrics getVerifyDataMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetricsOrBuilder getVerifyDataMetricsOrBuilder();

    // optional .Impinj.STP.TagModeMetrics encode_metrics = 4;
    /**
     */
    boolean hasEncodeMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetrics getEncodeMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetricsOrBuilder getEncodeMetricsOrBuilder();

    // optional .Impinj.STP.TagModeMetrics inventory_metrics = 5;
    /**
     */
    boolean hasInventoryMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetrics getInventoryMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetricsOrBuilder getInventoryMetricsOrBuilder();

    // optional .Impinj.STP.TagModeMetrics carton_contents_metrics = 6;
    /**
     */
    boolean hasCartonContentsMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetrics getCartonContentsMetrics();
    /**
     */
    com.impinj.stp.StpApi.TagModeMetricsOrBuilder getCartonContentsMetricsOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.TagMetrics}
   */
  public static final class TagMetrics extends
      com.google.protobuf.GeneratedMessage
      implements TagMetricsOrBuilder {
    // Use TagMetrics.newBuilder() to construct.
    private TagMetrics(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TagMetrics(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final TagMetrics defaultInstance;
    public static TagMetrics getDefaultInstance() {
      return defaultInstance;
    }

    public TagMetrics getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TagMetrics(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              tagChip_ = input.readBytes();
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.TagModeMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = verifyBasicMetrics_.toBuilder();
              }
              verifyBasicMetrics_ = input.readMessage(com.impinj.stp.StpApi.TagModeMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(verifyBasicMetrics_);
                verifyBasicMetrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.TagModeMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = verifyDataMetrics_.toBuilder();
              }
              verifyDataMetrics_ = input.readMessage(com.impinj.stp.StpApi.TagModeMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(verifyDataMetrics_);
                verifyDataMetrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.impinj.stp.StpApi.TagModeMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = encodeMetrics_.toBuilder();
              }
              encodeMetrics_ = input.readMessage(com.impinj.stp.StpApi.TagModeMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(encodeMetrics_);
                encodeMetrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.TagModeMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = inventoryMetrics_.toBuilder();
              }
              inventoryMetrics_ = input.readMessage(com.impinj.stp.StpApi.TagModeMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(inventoryMetrics_);
                inventoryMetrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.TagModeMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = cartonContentsMetrics_.toBuilder();
              }
              cartonContentsMetrics_ = input.readMessage(com.impinj.stp.StpApi.TagModeMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(cartonContentsMetrics_);
                cartonContentsMetrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagMetrics_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagMetrics_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.TagMetrics.class, com.impinj.stp.StpApi.TagMetrics.Builder.class);
    }

    public static com.google.protobuf.Parser<TagMetrics> PARSER =
        new com.google.protobuf.AbstractParser<TagMetrics>() {
      public TagMetrics parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new TagMetrics(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<TagMetrics> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes tag_chip = 1;
    public static final int TAG_CHIP_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString tagChip_;
    /**
     */
    public boolean hasTagChip() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.google.protobuf.ByteString getTagChip() {
      return tagChip_;
    }

    // optional .Impinj.STP.TagModeMetrics verify_basic_metrics = 2;
    public static final int VERIFY_BASIC_METRICS_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.TagModeMetrics verifyBasicMetrics_;
    /**
     */
    public boolean hasVerifyBasicMetrics() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetrics getVerifyBasicMetrics() {
      return verifyBasicMetrics_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getVerifyBasicMetricsOrBuilder() {
      return verifyBasicMetrics_;
    }

    // optional .Impinj.STP.TagModeMetrics verify_data_metrics = 3;
    public static final int VERIFY_DATA_METRICS_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.TagModeMetrics verifyDataMetrics_;
    /**
     */
    public boolean hasVerifyDataMetrics() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetrics getVerifyDataMetrics() {
      return verifyDataMetrics_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getVerifyDataMetricsOrBuilder() {
      return verifyDataMetrics_;
    }

    // optional .Impinj.STP.TagModeMetrics encode_metrics = 4;
    public static final int ENCODE_METRICS_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.TagModeMetrics encodeMetrics_;
    /**
     */
    public boolean hasEncodeMetrics() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetrics getEncodeMetrics() {
      return encodeMetrics_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getEncodeMetricsOrBuilder() {
      return encodeMetrics_;
    }

    // optional .Impinj.STP.TagModeMetrics inventory_metrics = 5;
    public static final int INVENTORY_METRICS_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.TagModeMetrics inventoryMetrics_;
    /**
     */
    public boolean hasInventoryMetrics() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetrics getInventoryMetrics() {
      return inventoryMetrics_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getInventoryMetricsOrBuilder() {
      return inventoryMetrics_;
    }

    // optional .Impinj.STP.TagModeMetrics carton_contents_metrics = 6;
    public static final int CARTON_CONTENTS_METRICS_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.TagModeMetrics cartonContentsMetrics_;
    /**
     */
    public boolean hasCartonContentsMetrics() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetrics getCartonContentsMetrics() {
      return cartonContentsMetrics_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getCartonContentsMetricsOrBuilder() {
      return cartonContentsMetrics_;
    }

    private void initFields() {
      tagChip_ = com.google.protobuf.ByteString.EMPTY;
      verifyBasicMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      verifyDataMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      encodeMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      inventoryMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      cartonContentsMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, tagChip_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, verifyBasicMetrics_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, verifyDataMetrics_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, encodeMetrics_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, inventoryMetrics_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, cartonContentsMetrics_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, tagChip_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, verifyBasicMetrics_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, verifyDataMetrics_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, encodeMetrics_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, inventoryMetrics_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, cartonContentsMetrics_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.TagMetrics parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.TagMetrics parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.TagMetrics prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.TagMetrics}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.TagMetricsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagMetrics_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagMetrics_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.TagMetrics.class, com.impinj.stp.StpApi.TagMetrics.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.TagMetrics.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getVerifyBasicMetricsFieldBuilder();
          getVerifyDataMetricsFieldBuilder();
          getEncodeMetricsFieldBuilder();
          getInventoryMetricsFieldBuilder();
          getCartonContentsMetricsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        tagChip_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (verifyBasicMetricsBuilder_ == null) {
          verifyBasicMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
        } else {
          verifyBasicMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (verifyDataMetricsBuilder_ == null) {
          verifyDataMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
        } else {
          verifyDataMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (encodeMetricsBuilder_ == null) {
          encodeMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
        } else {
          encodeMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (inventoryMetricsBuilder_ == null) {
          inventoryMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
        } else {
          inventoryMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (cartonContentsMetricsBuilder_ == null) {
          cartonContentsMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
        } else {
          cartonContentsMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_TagMetrics_descriptor;
      }

      public com.impinj.stp.StpApi.TagMetrics getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.TagMetrics.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.TagMetrics build() {
        com.impinj.stp.StpApi.TagMetrics result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.TagMetrics buildPartial() {
        com.impinj.stp.StpApi.TagMetrics result = new com.impinj.stp.StpApi.TagMetrics(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tagChip_ = tagChip_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (verifyBasicMetricsBuilder_ == null) {
          result.verifyBasicMetrics_ = verifyBasicMetrics_;
        } else {
          result.verifyBasicMetrics_ = verifyBasicMetricsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (verifyDataMetricsBuilder_ == null) {
          result.verifyDataMetrics_ = verifyDataMetrics_;
        } else {
          result.verifyDataMetrics_ = verifyDataMetricsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (encodeMetricsBuilder_ == null) {
          result.encodeMetrics_ = encodeMetrics_;
        } else {
          result.encodeMetrics_ = encodeMetricsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (inventoryMetricsBuilder_ == null) {
          result.inventoryMetrics_ = inventoryMetrics_;
        } else {
          result.inventoryMetrics_ = inventoryMetricsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (cartonContentsMetricsBuilder_ == null) {
          result.cartonContentsMetrics_ = cartonContentsMetrics_;
        } else {
          result.cartonContentsMetrics_ = cartonContentsMetricsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.TagMetrics) {
          return mergeFrom((com.impinj.stp.StpApi.TagMetrics)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.TagMetrics other) {
        if (other == com.impinj.stp.StpApi.TagMetrics.getDefaultInstance()) return this;
        if (other.hasTagChip()) {
          setTagChip(other.getTagChip());
        }
        if (other.hasVerifyBasicMetrics()) {
          mergeVerifyBasicMetrics(other.getVerifyBasicMetrics());
        }
        if (other.hasVerifyDataMetrics()) {
          mergeVerifyDataMetrics(other.getVerifyDataMetrics());
        }
        if (other.hasEncodeMetrics()) {
          mergeEncodeMetrics(other.getEncodeMetrics());
        }
        if (other.hasInventoryMetrics()) {
          mergeInventoryMetrics(other.getInventoryMetrics());
        }
        if (other.hasCartonContentsMetrics()) {
          mergeCartonContentsMetrics(other.getCartonContentsMetrics());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.TagMetrics parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.TagMetrics) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes tag_chip = 1;
      private com.google.protobuf.ByteString tagChip_ = com.google.protobuf.ByteString.EMPTY;
      /**
       */
      public boolean hasTagChip() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.google.protobuf.ByteString getTagChip() {
        return tagChip_;
      }
      /**
       */
      public Builder setTagChip(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tagChip_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearTagChip() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tagChip_ = getDefaultInstance().getTagChip();
        onChanged();
        return this;
      }

      // optional .Impinj.STP.TagModeMetrics verify_basic_metrics = 2;
      private com.impinj.stp.StpApi.TagModeMetrics verifyBasicMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> verifyBasicMetricsBuilder_;
      /**
       */
      public boolean hasVerifyBasicMetrics() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics getVerifyBasicMetrics() {
        if (verifyBasicMetricsBuilder_ == null) {
          return verifyBasicMetrics_;
        } else {
          return verifyBasicMetricsBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setVerifyBasicMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (verifyBasicMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          verifyBasicMetrics_ = value;
          onChanged();
        } else {
          verifyBasicMetricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setVerifyBasicMetrics(
          com.impinj.stp.StpApi.TagModeMetrics.Builder builderForValue) {
        if (verifyBasicMetricsBuilder_ == null) {
          verifyBasicMetrics_ = builderForValue.build();
          onChanged();
        } else {
          verifyBasicMetricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeVerifyBasicMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (verifyBasicMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              verifyBasicMetrics_ != com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance()) {
            verifyBasicMetrics_ =
              com.impinj.stp.StpApi.TagModeMetrics.newBuilder(verifyBasicMetrics_).mergeFrom(value).buildPartial();
          } else {
            verifyBasicMetrics_ = value;
          }
          onChanged();
        } else {
          verifyBasicMetricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearVerifyBasicMetrics() {
        if (verifyBasicMetricsBuilder_ == null) {
          verifyBasicMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
          onChanged();
        } else {
          verifyBasicMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics.Builder getVerifyBasicMetricsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getVerifyBasicMetricsFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getVerifyBasicMetricsOrBuilder() {
        if (verifyBasicMetricsBuilder_ != null) {
          return verifyBasicMetricsBuilder_.getMessageOrBuilder();
        } else {
          return verifyBasicMetrics_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> 
          getVerifyBasicMetricsFieldBuilder() {
        if (verifyBasicMetricsBuilder_ == null) {
          verifyBasicMetricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder>(
                  verifyBasicMetrics_,
                  getParentForChildren(),
                  isClean());
          verifyBasicMetrics_ = null;
        }
        return verifyBasicMetricsBuilder_;
      }

      // optional .Impinj.STP.TagModeMetrics verify_data_metrics = 3;
      private com.impinj.stp.StpApi.TagModeMetrics verifyDataMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> verifyDataMetricsBuilder_;
      /**
       */
      public boolean hasVerifyDataMetrics() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics getVerifyDataMetrics() {
        if (verifyDataMetricsBuilder_ == null) {
          return verifyDataMetrics_;
        } else {
          return verifyDataMetricsBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setVerifyDataMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (verifyDataMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          verifyDataMetrics_ = value;
          onChanged();
        } else {
          verifyDataMetricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder setVerifyDataMetrics(
          com.impinj.stp.StpApi.TagModeMetrics.Builder builderForValue) {
        if (verifyDataMetricsBuilder_ == null) {
          verifyDataMetrics_ = builderForValue.build();
          onChanged();
        } else {
          verifyDataMetricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder mergeVerifyDataMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (verifyDataMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              verifyDataMetrics_ != com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance()) {
            verifyDataMetrics_ =
              com.impinj.stp.StpApi.TagModeMetrics.newBuilder(verifyDataMetrics_).mergeFrom(value).buildPartial();
          } else {
            verifyDataMetrics_ = value;
          }
          onChanged();
        } else {
          verifyDataMetricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder clearVerifyDataMetrics() {
        if (verifyDataMetricsBuilder_ == null) {
          verifyDataMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
          onChanged();
        } else {
          verifyDataMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics.Builder getVerifyDataMetricsBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getVerifyDataMetricsFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getVerifyDataMetricsOrBuilder() {
        if (verifyDataMetricsBuilder_ != null) {
          return verifyDataMetricsBuilder_.getMessageOrBuilder();
        } else {
          return verifyDataMetrics_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> 
          getVerifyDataMetricsFieldBuilder() {
        if (verifyDataMetricsBuilder_ == null) {
          verifyDataMetricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder>(
                  verifyDataMetrics_,
                  getParentForChildren(),
                  isClean());
          verifyDataMetrics_ = null;
        }
        return verifyDataMetricsBuilder_;
      }

      // optional .Impinj.STP.TagModeMetrics encode_metrics = 4;
      private com.impinj.stp.StpApi.TagModeMetrics encodeMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> encodeMetricsBuilder_;
      /**
       */
      public boolean hasEncodeMetrics() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics getEncodeMetrics() {
        if (encodeMetricsBuilder_ == null) {
          return encodeMetrics_;
        } else {
          return encodeMetricsBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setEncodeMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (encodeMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          encodeMetrics_ = value;
          onChanged();
        } else {
          encodeMetricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setEncodeMetrics(
          com.impinj.stp.StpApi.TagModeMetrics.Builder builderForValue) {
        if (encodeMetricsBuilder_ == null) {
          encodeMetrics_ = builderForValue.build();
          onChanged();
        } else {
          encodeMetricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeEncodeMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (encodeMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              encodeMetrics_ != com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance()) {
            encodeMetrics_ =
              com.impinj.stp.StpApi.TagModeMetrics.newBuilder(encodeMetrics_).mergeFrom(value).buildPartial();
          } else {
            encodeMetrics_ = value;
          }
          onChanged();
        } else {
          encodeMetricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearEncodeMetrics() {
        if (encodeMetricsBuilder_ == null) {
          encodeMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
          onChanged();
        } else {
          encodeMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics.Builder getEncodeMetricsBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getEncodeMetricsFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getEncodeMetricsOrBuilder() {
        if (encodeMetricsBuilder_ != null) {
          return encodeMetricsBuilder_.getMessageOrBuilder();
        } else {
          return encodeMetrics_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> 
          getEncodeMetricsFieldBuilder() {
        if (encodeMetricsBuilder_ == null) {
          encodeMetricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder>(
                  encodeMetrics_,
                  getParentForChildren(),
                  isClean());
          encodeMetrics_ = null;
        }
        return encodeMetricsBuilder_;
      }

      // optional .Impinj.STP.TagModeMetrics inventory_metrics = 5;
      private com.impinj.stp.StpApi.TagModeMetrics inventoryMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> inventoryMetricsBuilder_;
      /**
       */
      public boolean hasInventoryMetrics() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics getInventoryMetrics() {
        if (inventoryMetricsBuilder_ == null) {
          return inventoryMetrics_;
        } else {
          return inventoryMetricsBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setInventoryMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (inventoryMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          inventoryMetrics_ = value;
          onChanged();
        } else {
          inventoryMetricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder setInventoryMetrics(
          com.impinj.stp.StpApi.TagModeMetrics.Builder builderForValue) {
        if (inventoryMetricsBuilder_ == null) {
          inventoryMetrics_ = builderForValue.build();
          onChanged();
        } else {
          inventoryMetricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder mergeInventoryMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (inventoryMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              inventoryMetrics_ != com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance()) {
            inventoryMetrics_ =
              com.impinj.stp.StpApi.TagModeMetrics.newBuilder(inventoryMetrics_).mergeFrom(value).buildPartial();
          } else {
            inventoryMetrics_ = value;
          }
          onChanged();
        } else {
          inventoryMetricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder clearInventoryMetrics() {
        if (inventoryMetricsBuilder_ == null) {
          inventoryMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
          onChanged();
        } else {
          inventoryMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics.Builder getInventoryMetricsBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getInventoryMetricsFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getInventoryMetricsOrBuilder() {
        if (inventoryMetricsBuilder_ != null) {
          return inventoryMetricsBuilder_.getMessageOrBuilder();
        } else {
          return inventoryMetrics_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> 
          getInventoryMetricsFieldBuilder() {
        if (inventoryMetricsBuilder_ == null) {
          inventoryMetricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder>(
                  inventoryMetrics_,
                  getParentForChildren(),
                  isClean());
          inventoryMetrics_ = null;
        }
        return inventoryMetricsBuilder_;
      }

      // optional .Impinj.STP.TagModeMetrics carton_contents_metrics = 6;
      private com.impinj.stp.StpApi.TagModeMetrics cartonContentsMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> cartonContentsMetricsBuilder_;
      /**
       */
      public boolean hasCartonContentsMetrics() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics getCartonContentsMetrics() {
        if (cartonContentsMetricsBuilder_ == null) {
          return cartonContentsMetrics_;
        } else {
          return cartonContentsMetricsBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setCartonContentsMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (cartonContentsMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          cartonContentsMetrics_ = value;
          onChanged();
        } else {
          cartonContentsMetricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setCartonContentsMetrics(
          com.impinj.stp.StpApi.TagModeMetrics.Builder builderForValue) {
        if (cartonContentsMetricsBuilder_ == null) {
          cartonContentsMetrics_ = builderForValue.build();
          onChanged();
        } else {
          cartonContentsMetricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeCartonContentsMetrics(com.impinj.stp.StpApi.TagModeMetrics value) {
        if (cartonContentsMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              cartonContentsMetrics_ != com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance()) {
            cartonContentsMetrics_ =
              com.impinj.stp.StpApi.TagModeMetrics.newBuilder(cartonContentsMetrics_).mergeFrom(value).buildPartial();
          } else {
            cartonContentsMetrics_ = value;
          }
          onChanged();
        } else {
          cartonContentsMetricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearCartonContentsMetrics() {
        if (cartonContentsMetricsBuilder_ == null) {
          cartonContentsMetrics_ = com.impinj.stp.StpApi.TagModeMetrics.getDefaultInstance();
          onChanged();
        } else {
          cartonContentsMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetrics.Builder getCartonContentsMetricsBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getCartonContentsMetricsFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TagModeMetricsOrBuilder getCartonContentsMetricsOrBuilder() {
        if (cartonContentsMetricsBuilder_ != null) {
          return cartonContentsMetricsBuilder_.getMessageOrBuilder();
        } else {
          return cartonContentsMetrics_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder> 
          getCartonContentsMetricsFieldBuilder() {
        if (cartonContentsMetricsBuilder_ == null) {
          cartonContentsMetricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TagModeMetrics, com.impinj.stp.StpApi.TagModeMetrics.Builder, com.impinj.stp.StpApi.TagModeMetricsOrBuilder>(
                  cartonContentsMetrics_,
                  getParentForChildren(),
                  isClean());
          cartonContentsMetrics_ = null;
        }
        return cartonContentsMetricsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.TagMetrics)
    }

    static {
      defaultInstance = new TagMetrics(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.TagMetrics)
  }

  public interface InterDeviceCommunicationMetricsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string serial_number = 1;
    /**
     */
    boolean hasSerialNumber();
    /**
     */
    java.lang.String getSerialNumber();
    /**
     */
    com.google.protobuf.ByteString
        getSerialNumberBytes();

    // optional uint64 received_message_count = 2;
    /**
     */
    boolean hasReceivedMessageCount();
    /**
     */
    long getReceivedMessageCount();
  }
  /**
   * Protobuf type {@code Impinj.STP.InterDeviceCommunicationMetrics}
   */
  public static final class InterDeviceCommunicationMetrics extends
      com.google.protobuf.GeneratedMessage
      implements InterDeviceCommunicationMetricsOrBuilder {
    // Use InterDeviceCommunicationMetrics.newBuilder() to construct.
    private InterDeviceCommunicationMetrics(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InterDeviceCommunicationMetrics(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final InterDeviceCommunicationMetrics defaultInstance;
    public static InterDeviceCommunicationMetrics getDefaultInstance() {
      return defaultInstance;
    }

    public InterDeviceCommunicationMetrics getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InterDeviceCommunicationMetrics(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              serialNumber_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              receivedMessageCount_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_InterDeviceCommunicationMetrics_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_InterDeviceCommunicationMetrics_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.class, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder.class);
    }

    public static com.google.protobuf.Parser<InterDeviceCommunicationMetrics> PARSER =
        new com.google.protobuf.AbstractParser<InterDeviceCommunicationMetrics>() {
      public InterDeviceCommunicationMetrics parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InterDeviceCommunicationMetrics(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<InterDeviceCommunicationMetrics> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string serial_number = 1;
    public static final int SERIAL_NUMBER_FIELD_NUMBER = 1;
    private java.lang.Object serialNumber_;
    /**
     */
    public boolean hasSerialNumber() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public java.lang.String getSerialNumber() {
      java.lang.Object ref = serialNumber_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          serialNumber_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getSerialNumberBytes() {
      java.lang.Object ref = serialNumber_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        serialNumber_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional uint64 received_message_count = 2;
    public static final int RECEIVED_MESSAGE_COUNT_FIELD_NUMBER = 2;
    private long receivedMessageCount_;
    /**
     */
    public boolean hasReceivedMessageCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public long getReceivedMessageCount() {
      return receivedMessageCount_;
    }

    private void initFields() {
      serialNumber_ = "";
      receivedMessageCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getSerialNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(2, receivedMessageCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getSerialNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, receivedMessageCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.InterDeviceCommunicationMetrics prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.InterDeviceCommunicationMetrics}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InterDeviceCommunicationMetrics_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InterDeviceCommunicationMetrics_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.class, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        serialNumber_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        receivedMessageCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_InterDeviceCommunicationMetrics_descriptor;
      }

      public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics build() {
        com.impinj.stp.StpApi.InterDeviceCommunicationMetrics result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics buildPartial() {
        com.impinj.stp.StpApi.InterDeviceCommunicationMetrics result = new com.impinj.stp.StpApi.InterDeviceCommunicationMetrics(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.serialNumber_ = serialNumber_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.receivedMessageCount_ = receivedMessageCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.InterDeviceCommunicationMetrics) {
          return mergeFrom((com.impinj.stp.StpApi.InterDeviceCommunicationMetrics)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.InterDeviceCommunicationMetrics other) {
        if (other == com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.getDefaultInstance()) return this;
        if (other.hasSerialNumber()) {
          bitField0_ |= 0x00000001;
          serialNumber_ = other.serialNumber_;
          onChanged();
        }
        if (other.hasReceivedMessageCount()) {
          setReceivedMessageCount(other.getReceivedMessageCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.InterDeviceCommunicationMetrics parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.InterDeviceCommunicationMetrics) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string serial_number = 1;
      private java.lang.Object serialNumber_ = "";
      /**
       */
      public boolean hasSerialNumber() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public java.lang.String getSerialNumber() {
        java.lang.Object ref = serialNumber_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          serialNumber_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getSerialNumberBytes() {
        java.lang.Object ref = serialNumber_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          serialNumber_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setSerialNumber(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        serialNumber_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearSerialNumber() {
        bitField0_ = (bitField0_ & ~0x00000001);
        serialNumber_ = getDefaultInstance().getSerialNumber();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setSerialNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        serialNumber_ = value;
        onChanged();
        return this;
      }

      // optional uint64 received_message_count = 2;
      private long receivedMessageCount_ ;
      /**
       */
      public boolean hasReceivedMessageCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public long getReceivedMessageCount() {
        return receivedMessageCount_;
      }
      /**
       */
      public Builder setReceivedMessageCount(long value) {
        bitField0_ |= 0x00000002;
        receivedMessageCount_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReceivedMessageCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        receivedMessageCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.InterDeviceCommunicationMetrics)
    }

    static {
      defaultInstance = new InterDeviceCommunicationMetrics(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.InterDeviceCommunicationMetrics)
  }

  public interface OperationMetricsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint64 remaining_non_monza_encodes = 1;
    /**
     */
    boolean hasRemainingNonMonzaEncodes();
    /**
     */
    long getRemainingNonMonzaEncodes();

    // repeated .Impinj.STP.TagMetrics tag_metrics = 2;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.TagMetrics> 
        getTagMetricsList();
    /**
     */
    com.impinj.stp.StpApi.TagMetrics getTagMetrics(int index);
    /**
     */
    int getTagMetricsCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.TagMetricsOrBuilder> 
        getTagMetricsOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.TagMetricsOrBuilder getTagMetricsOrBuilder(
        int index);

    // repeated .Impinj.STP.InterDeviceCommunicationMetrics inter_device_communication_metrics = 3;
    /**
     */
    java.util.List<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics> 
        getInterDeviceCommunicationMetricsList();
    /**
     */
    com.impinj.stp.StpApi.InterDeviceCommunicationMetrics getInterDeviceCommunicationMetrics(int index);
    /**
     */
    int getInterDeviceCommunicationMetricsCount();
    /**
     */
    java.util.List<? extends com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder> 
        getInterDeviceCommunicationMetricsOrBuilderList();
    /**
     */
    com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder getInterDeviceCommunicationMetricsOrBuilder(
        int index);

    // optional uint64 remaining_monza_encodes = 5;
    /**
     */
    boolean hasRemainingMonzaEncodes();
    /**
     */
    long getRemainingMonzaEncodes();
  }
  /**
   * Protobuf type {@code Impinj.STP.OperationMetrics}
   */
  public static final class OperationMetrics extends
      com.google.protobuf.GeneratedMessage
      implements OperationMetricsOrBuilder {
    // Use OperationMetrics.newBuilder() to construct.
    private OperationMetrics(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OperationMetrics(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OperationMetrics defaultInstance;
    public static OperationMetrics getDefaultInstance() {
      return defaultInstance;
    }

    public OperationMetrics getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OperationMetrics(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              remainingNonMonzaEncodes_ = input.readUInt64();
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                tagMetrics_ = new java.util.ArrayList<com.impinj.stp.StpApi.TagMetrics>();
                mutable_bitField0_ |= 0x00000002;
              }
              tagMetrics_.add(input.readMessage(com.impinj.stp.StpApi.TagMetrics.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                interDeviceCommunicationMetrics_ = new java.util.ArrayList<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics>();
                mutable_bitField0_ |= 0x00000004;
              }
              interDeviceCommunicationMetrics_.add(input.readMessage(com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.PARSER, extensionRegistry));
              break;
            }
            case 40: {
              bitField0_ |= 0x00000002;
              remainingMonzaEncodes_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          tagMetrics_ = java.util.Collections.unmodifiableList(tagMetrics_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          interDeviceCommunicationMetrics_ = java.util.Collections.unmodifiableList(interDeviceCommunicationMetrics_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationMetrics_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationMetrics_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OperationMetrics.class, com.impinj.stp.StpApi.OperationMetrics.Builder.class);
    }

    public static com.google.protobuf.Parser<OperationMetrics> PARSER =
        new com.google.protobuf.AbstractParser<OperationMetrics>() {
      public OperationMetrics parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OperationMetrics(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OperationMetrics> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional uint64 remaining_non_monza_encodes = 1;
    public static final int REMAINING_NON_MONZA_ENCODES_FIELD_NUMBER = 1;
    private long remainingNonMonzaEncodes_;
    /**
     */
    public boolean hasRemainingNonMonzaEncodes() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public long getRemainingNonMonzaEncodes() {
      return remainingNonMonzaEncodes_;
    }

    // repeated .Impinj.STP.TagMetrics tag_metrics = 2;
    public static final int TAG_METRICS_FIELD_NUMBER = 2;
    private java.util.List<com.impinj.stp.StpApi.TagMetrics> tagMetrics_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.TagMetrics> getTagMetricsList() {
      return tagMetrics_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.TagMetricsOrBuilder> 
        getTagMetricsOrBuilderList() {
      return tagMetrics_;
    }
    /**
     */
    public int getTagMetricsCount() {
      return tagMetrics_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.TagMetrics getTagMetrics(int index) {
      return tagMetrics_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagMetricsOrBuilder getTagMetricsOrBuilder(
        int index) {
      return tagMetrics_.get(index);
    }

    // repeated .Impinj.STP.InterDeviceCommunicationMetrics inter_device_communication_metrics = 3;
    public static final int INTER_DEVICE_COMMUNICATION_METRICS_FIELD_NUMBER = 3;
    private java.util.List<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics> interDeviceCommunicationMetrics_;
    /**
     */
    public java.util.List<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics> getInterDeviceCommunicationMetricsList() {
      return interDeviceCommunicationMetrics_;
    }
    /**
     */
    public java.util.List<? extends com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder> 
        getInterDeviceCommunicationMetricsOrBuilderList() {
      return interDeviceCommunicationMetrics_;
    }
    /**
     */
    public int getInterDeviceCommunicationMetricsCount() {
      return interDeviceCommunicationMetrics_.size();
    }
    /**
     */
    public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics getInterDeviceCommunicationMetrics(int index) {
      return interDeviceCommunicationMetrics_.get(index);
    }
    /**
     */
    public com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder getInterDeviceCommunicationMetricsOrBuilder(
        int index) {
      return interDeviceCommunicationMetrics_.get(index);
    }

    // optional uint64 remaining_monza_encodes = 5;
    public static final int REMAINING_MONZA_ENCODES_FIELD_NUMBER = 5;
    private long remainingMonzaEncodes_;
    /**
     */
    public boolean hasRemainingMonzaEncodes() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public long getRemainingMonzaEncodes() {
      return remainingMonzaEncodes_;
    }

    private void initFields() {
      remainingNonMonzaEncodes_ = 0L;
      tagMetrics_ = java.util.Collections.emptyList();
      interDeviceCommunicationMetrics_ = java.util.Collections.emptyList();
      remainingMonzaEncodes_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt64(1, remainingNonMonzaEncodes_);
      }
      for (int i = 0; i < tagMetrics_.size(); i++) {
        output.writeMessage(2, tagMetrics_.get(i));
      }
      for (int i = 0; i < interDeviceCommunicationMetrics_.size(); i++) {
        output.writeMessage(3, interDeviceCommunicationMetrics_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(5, remainingMonzaEncodes_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, remainingNonMonzaEncodes_);
      }
      for (int i = 0; i < tagMetrics_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, tagMetrics_.get(i));
      }
      for (int i = 0; i < interDeviceCommunicationMetrics_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, interDeviceCommunicationMetrics_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(5, remainingMonzaEncodes_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationMetrics parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OperationMetrics prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OperationMetrics}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OperationMetricsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationMetrics_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationMetrics_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OperationMetrics.class, com.impinj.stp.StpApi.OperationMetrics.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OperationMetrics.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTagMetricsFieldBuilder();
          getInterDeviceCommunicationMetricsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        remainingNonMonzaEncodes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (tagMetricsBuilder_ == null) {
          tagMetrics_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          tagMetricsBuilder_.clear();
        }
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          interDeviceCommunicationMetrics_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          interDeviceCommunicationMetricsBuilder_.clear();
        }
        remainingMonzaEncodes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationMetrics_descriptor;
      }

      public com.impinj.stp.StpApi.OperationMetrics getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OperationMetrics.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OperationMetrics build() {
        com.impinj.stp.StpApi.OperationMetrics result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OperationMetrics buildPartial() {
        com.impinj.stp.StpApi.OperationMetrics result = new com.impinj.stp.StpApi.OperationMetrics(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.remainingNonMonzaEncodes_ = remainingNonMonzaEncodes_;
        if (tagMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            tagMetrics_ = java.util.Collections.unmodifiableList(tagMetrics_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.tagMetrics_ = tagMetrics_;
        } else {
          result.tagMetrics_ = tagMetricsBuilder_.build();
        }
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            interDeviceCommunicationMetrics_ = java.util.Collections.unmodifiableList(interDeviceCommunicationMetrics_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.interDeviceCommunicationMetrics_ = interDeviceCommunicationMetrics_;
        } else {
          result.interDeviceCommunicationMetrics_ = interDeviceCommunicationMetricsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000002;
        }
        result.remainingMonzaEncodes_ = remainingMonzaEncodes_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OperationMetrics) {
          return mergeFrom((com.impinj.stp.StpApi.OperationMetrics)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OperationMetrics other) {
        if (other == com.impinj.stp.StpApi.OperationMetrics.getDefaultInstance()) return this;
        if (other.hasRemainingNonMonzaEncodes()) {
          setRemainingNonMonzaEncodes(other.getRemainingNonMonzaEncodes());
        }
        if (tagMetricsBuilder_ == null) {
          if (!other.tagMetrics_.isEmpty()) {
            if (tagMetrics_.isEmpty()) {
              tagMetrics_ = other.tagMetrics_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureTagMetricsIsMutable();
              tagMetrics_.addAll(other.tagMetrics_);
            }
            onChanged();
          }
        } else {
          if (!other.tagMetrics_.isEmpty()) {
            if (tagMetricsBuilder_.isEmpty()) {
              tagMetricsBuilder_.dispose();
              tagMetricsBuilder_ = null;
              tagMetrics_ = other.tagMetrics_;
              bitField0_ = (bitField0_ & ~0x00000002);
              tagMetricsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTagMetricsFieldBuilder() : null;
            } else {
              tagMetricsBuilder_.addAllMessages(other.tagMetrics_);
            }
          }
        }
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          if (!other.interDeviceCommunicationMetrics_.isEmpty()) {
            if (interDeviceCommunicationMetrics_.isEmpty()) {
              interDeviceCommunicationMetrics_ = other.interDeviceCommunicationMetrics_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureInterDeviceCommunicationMetricsIsMutable();
              interDeviceCommunicationMetrics_.addAll(other.interDeviceCommunicationMetrics_);
            }
            onChanged();
          }
        } else {
          if (!other.interDeviceCommunicationMetrics_.isEmpty()) {
            if (interDeviceCommunicationMetricsBuilder_.isEmpty()) {
              interDeviceCommunicationMetricsBuilder_.dispose();
              interDeviceCommunicationMetricsBuilder_ = null;
              interDeviceCommunicationMetrics_ = other.interDeviceCommunicationMetrics_;
              bitField0_ = (bitField0_ & ~0x00000004);
              interDeviceCommunicationMetricsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getInterDeviceCommunicationMetricsFieldBuilder() : null;
            } else {
              interDeviceCommunicationMetricsBuilder_.addAllMessages(other.interDeviceCommunicationMetrics_);
            }
          }
        }
        if (other.hasRemainingMonzaEncodes()) {
          setRemainingMonzaEncodes(other.getRemainingMonzaEncodes());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OperationMetrics parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OperationMetrics) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint64 remaining_non_monza_encodes = 1;
      private long remainingNonMonzaEncodes_ ;
      /**
       */
      public boolean hasRemainingNonMonzaEncodes() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public long getRemainingNonMonzaEncodes() {
        return remainingNonMonzaEncodes_;
      }
      /**
       */
      public Builder setRemainingNonMonzaEncodes(long value) {
        bitField0_ |= 0x00000001;
        remainingNonMonzaEncodes_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearRemainingNonMonzaEncodes() {
        bitField0_ = (bitField0_ & ~0x00000001);
        remainingNonMonzaEncodes_ = 0L;
        onChanged();
        return this;
      }

      // repeated .Impinj.STP.TagMetrics tag_metrics = 2;
      private java.util.List<com.impinj.stp.StpApi.TagMetrics> tagMetrics_ =
        java.util.Collections.emptyList();
      private void ensureTagMetricsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          tagMetrics_ = new java.util.ArrayList<com.impinj.stp.StpApi.TagMetrics>(tagMetrics_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.TagMetrics, com.impinj.stp.StpApi.TagMetrics.Builder, com.impinj.stp.StpApi.TagMetricsOrBuilder> tagMetricsBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.TagMetrics> getTagMetricsList() {
        if (tagMetricsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tagMetrics_);
        } else {
          return tagMetricsBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getTagMetricsCount() {
        if (tagMetricsBuilder_ == null) {
          return tagMetrics_.size();
        } else {
          return tagMetricsBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.TagMetrics getTagMetrics(int index) {
        if (tagMetricsBuilder_ == null) {
          return tagMetrics_.get(index);
        } else {
          return tagMetricsBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setTagMetrics(
          int index, com.impinj.stp.StpApi.TagMetrics value) {
        if (tagMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagMetricsIsMutable();
          tagMetrics_.set(index, value);
          onChanged();
        } else {
          tagMetricsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setTagMetrics(
          int index, com.impinj.stp.StpApi.TagMetrics.Builder builderForValue) {
        if (tagMetricsBuilder_ == null) {
          ensureTagMetricsIsMutable();
          tagMetrics_.set(index, builderForValue.build());
          onChanged();
        } else {
          tagMetricsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTagMetrics(com.impinj.stp.StpApi.TagMetrics value) {
        if (tagMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagMetricsIsMutable();
          tagMetrics_.add(value);
          onChanged();
        } else {
          tagMetricsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addTagMetrics(
          int index, com.impinj.stp.StpApi.TagMetrics value) {
        if (tagMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagMetricsIsMutable();
          tagMetrics_.add(index, value);
          onChanged();
        } else {
          tagMetricsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addTagMetrics(
          com.impinj.stp.StpApi.TagMetrics.Builder builderForValue) {
        if (tagMetricsBuilder_ == null) {
          ensureTagMetricsIsMutable();
          tagMetrics_.add(builderForValue.build());
          onChanged();
        } else {
          tagMetricsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addTagMetrics(
          int index, com.impinj.stp.StpApi.TagMetrics.Builder builderForValue) {
        if (tagMetricsBuilder_ == null) {
          ensureTagMetricsIsMutable();
          tagMetrics_.add(index, builderForValue.build());
          onChanged();
        } else {
          tagMetricsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllTagMetrics(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.TagMetrics> values) {
        if (tagMetricsBuilder_ == null) {
          ensureTagMetricsIsMutable();
          super.addAll(values, tagMetrics_);
          onChanged();
        } else {
          tagMetricsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearTagMetrics() {
        if (tagMetricsBuilder_ == null) {
          tagMetrics_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          tagMetricsBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeTagMetrics(int index) {
        if (tagMetricsBuilder_ == null) {
          ensureTagMetricsIsMutable();
          tagMetrics_.remove(index);
          onChanged();
        } else {
          tagMetricsBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagMetrics.Builder getTagMetricsBuilder(
          int index) {
        return getTagMetricsFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagMetricsOrBuilder getTagMetricsOrBuilder(
          int index) {
        if (tagMetricsBuilder_ == null) {
          return tagMetrics_.get(index);  } else {
          return tagMetricsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.TagMetricsOrBuilder> 
           getTagMetricsOrBuilderList() {
        if (tagMetricsBuilder_ != null) {
          return tagMetricsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tagMetrics_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.TagMetrics.Builder addTagMetricsBuilder() {
        return getTagMetricsFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.TagMetrics.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.TagMetrics.Builder addTagMetricsBuilder(
          int index) {
        return getTagMetricsFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.TagMetrics.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.TagMetrics.Builder> 
           getTagMetricsBuilderList() {
        return getTagMetricsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.TagMetrics, com.impinj.stp.StpApi.TagMetrics.Builder, com.impinj.stp.StpApi.TagMetricsOrBuilder> 
          getTagMetricsFieldBuilder() {
        if (tagMetricsBuilder_ == null) {
          tagMetricsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.TagMetrics, com.impinj.stp.StpApi.TagMetrics.Builder, com.impinj.stp.StpApi.TagMetricsOrBuilder>(
                  tagMetrics_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          tagMetrics_ = null;
        }
        return tagMetricsBuilder_;
      }

      // repeated .Impinj.STP.InterDeviceCommunicationMetrics inter_device_communication_metrics = 3;
      private java.util.List<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics> interDeviceCommunicationMetrics_ =
        java.util.Collections.emptyList();
      private void ensureInterDeviceCommunicationMetricsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          interDeviceCommunicationMetrics_ = new java.util.ArrayList<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics>(interDeviceCommunicationMetrics_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.InterDeviceCommunicationMetrics, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder, com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder> interDeviceCommunicationMetricsBuilder_;

      /**
       */
      public java.util.List<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics> getInterDeviceCommunicationMetricsList() {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(interDeviceCommunicationMetrics_);
        } else {
          return interDeviceCommunicationMetricsBuilder_.getMessageList();
        }
      }
      /**
       */
      public int getInterDeviceCommunicationMetricsCount() {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          return interDeviceCommunicationMetrics_.size();
        } else {
          return interDeviceCommunicationMetricsBuilder_.getCount();
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics getInterDeviceCommunicationMetrics(int index) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          return interDeviceCommunicationMetrics_.get(index);
        } else {
          return interDeviceCommunicationMetricsBuilder_.getMessage(index);
        }
      }
      /**
       */
      public Builder setInterDeviceCommunicationMetrics(
          int index, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics value) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInterDeviceCommunicationMetricsIsMutable();
          interDeviceCommunicationMetrics_.set(index, value);
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder setInterDeviceCommunicationMetrics(
          int index, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder builderForValue) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          ensureInterDeviceCommunicationMetricsIsMutable();
          interDeviceCommunicationMetrics_.set(index, builderForValue.build());
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addInterDeviceCommunicationMetrics(com.impinj.stp.StpApi.InterDeviceCommunicationMetrics value) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInterDeviceCommunicationMetricsIsMutable();
          interDeviceCommunicationMetrics_.add(value);
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       */
      public Builder addInterDeviceCommunicationMetrics(
          int index, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics value) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInterDeviceCommunicationMetricsIsMutable();
          interDeviceCommunicationMetrics_.add(index, value);
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       */
      public Builder addInterDeviceCommunicationMetrics(
          com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder builderForValue) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          ensureInterDeviceCommunicationMetricsIsMutable();
          interDeviceCommunicationMetrics_.add(builderForValue.build());
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addInterDeviceCommunicationMetrics(
          int index, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder builderForValue) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          ensureInterDeviceCommunicationMetricsIsMutable();
          interDeviceCommunicationMetrics_.add(index, builderForValue.build());
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       */
      public Builder addAllInterDeviceCommunicationMetrics(
          java.lang.Iterable<? extends com.impinj.stp.StpApi.InterDeviceCommunicationMetrics> values) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          ensureInterDeviceCommunicationMetricsIsMutable();
          super.addAll(values, interDeviceCommunicationMetrics_);
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       */
      public Builder clearInterDeviceCommunicationMetrics() {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          interDeviceCommunicationMetrics_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.clear();
        }
        return this;
      }
      /**
       */
      public Builder removeInterDeviceCommunicationMetrics(int index) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          ensureInterDeviceCommunicationMetricsIsMutable();
          interDeviceCommunicationMetrics_.remove(index);
          onChanged();
        } else {
          interDeviceCommunicationMetricsBuilder_.remove(index);
        }
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder getInterDeviceCommunicationMetricsBuilder(
          int index) {
        return getInterDeviceCommunicationMetricsFieldBuilder().getBuilder(index);
      }
      /**
       */
      public com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder getInterDeviceCommunicationMetricsOrBuilder(
          int index) {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          return interDeviceCommunicationMetrics_.get(index);  } else {
          return interDeviceCommunicationMetricsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       */
      public java.util.List<? extends com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder> 
           getInterDeviceCommunicationMetricsOrBuilderList() {
        if (interDeviceCommunicationMetricsBuilder_ != null) {
          return interDeviceCommunicationMetricsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(interDeviceCommunicationMetrics_);
        }
      }
      /**
       */
      public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder addInterDeviceCommunicationMetricsBuilder() {
        return getInterDeviceCommunicationMetricsFieldBuilder().addBuilder(
            com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.getDefaultInstance());
      }
      /**
       */
      public com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder addInterDeviceCommunicationMetricsBuilder(
          int index) {
        return getInterDeviceCommunicationMetricsFieldBuilder().addBuilder(
            index, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.getDefaultInstance());
      }
      /**
       */
      public java.util.List<com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder> 
           getInterDeviceCommunicationMetricsBuilderList() {
        return getInterDeviceCommunicationMetricsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.impinj.stp.StpApi.InterDeviceCommunicationMetrics, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder, com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder> 
          getInterDeviceCommunicationMetricsFieldBuilder() {
        if (interDeviceCommunicationMetricsBuilder_ == null) {
          interDeviceCommunicationMetricsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.impinj.stp.StpApi.InterDeviceCommunicationMetrics, com.impinj.stp.StpApi.InterDeviceCommunicationMetrics.Builder, com.impinj.stp.StpApi.InterDeviceCommunicationMetricsOrBuilder>(
                  interDeviceCommunicationMetrics_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          interDeviceCommunicationMetrics_ = null;
        }
        return interDeviceCommunicationMetricsBuilder_;
      }

      // optional uint64 remaining_monza_encodes = 5;
      private long remainingMonzaEncodes_ ;
      /**
       */
      public boolean hasRemainingMonzaEncodes() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public long getRemainingMonzaEncodes() {
        return remainingMonzaEncodes_;
      }
      /**
       */
      public Builder setRemainingMonzaEncodes(long value) {
        bitField0_ |= 0x00000008;
        remainingMonzaEncodes_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearRemainingMonzaEncodes() {
        bitField0_ = (bitField0_ & ~0x00000008);
        remainingMonzaEncodes_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OperationMetrics)
    }

    static {
      defaultInstance = new OperationMetrics(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OperationMetrics)
  }

  public interface OperationDataDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string serial_number = 1;
    /**
     */
    boolean hasSerialNumber();
    /**
     */
    java.lang.String getSerialNumber();
    /**
     */
    com.google.protobuf.ByteString
        getSerialNumberBytes();

    // optional string firmware_version = 2;
    /**
     */
    boolean hasFirmwareVersion();
    /**
     */
    java.lang.String getFirmwareVersion();
    /**
     */
    com.google.protobuf.ByteString
        getFirmwareVersionBytes();

    // optional string region = 3;
    /**
     */
    boolean hasRegion();
    /**
     */
    java.lang.String getRegion();
    /**
     */
    com.google.protobuf.ByteString
        getRegionBytes();

    // repeated string installed_features = 4;
    /**
     */
    java.util.List<java.lang.String>
    getInstalledFeaturesList();
    /**
     */
    int getInstalledFeaturesCount();
    /**
     */
    java.lang.String getInstalledFeatures(int index);
    /**
     */
    com.google.protobuf.ByteString
        getInstalledFeaturesBytes(int index);

    // optional uint32 non_monza_volume_key_id = 5;
    /**
     */
    boolean hasNonMonzaVolumeKeyId();
    /**
     */
    int getNonMonzaVolumeKeyId();

    // optional .Impinj.STP.OperationMetrics operation_metrics = 6;
    /**
     */
    boolean hasOperationMetrics();
    /**
     */
    com.impinj.stp.StpApi.OperationMetrics getOperationMetrics();
    /**
     */
    com.impinj.stp.StpApi.OperationMetricsOrBuilder getOperationMetricsOrBuilder();

    // optional uint32 monza_volume_key_id = 7;
    /**
     */
    boolean hasMonzaVolumeKeyId();
    /**
     */
    int getMonzaVolumeKeyId();
  }
  /**
   * Protobuf type {@code Impinj.STP.OperationDataDetails}
   */
  public static final class OperationDataDetails extends
      com.google.protobuf.GeneratedMessage
      implements OperationDataDetailsOrBuilder {
    // Use OperationDataDetails.newBuilder() to construct.
    private OperationDataDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OperationDataDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OperationDataDetails defaultInstance;
    public static OperationDataDetails getDefaultInstance() {
      return defaultInstance;
    }

    public OperationDataDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OperationDataDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              serialNumber_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              firmwareVersion_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              region_ = input.readBytes();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                installedFeatures_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              installedFeatures_.add(input.readBytes());
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              nonMonzaVolumeKeyId_ = input.readUInt32();
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.OperationMetrics.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = operationMetrics_.toBuilder();
              }
              operationMetrics_ = input.readMessage(com.impinj.stp.StpApi.OperationMetrics.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(operationMetrics_);
                operationMetrics_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 56: {
              bitField0_ |= 0x00000020;
              monzaVolumeKeyId_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          installedFeatures_ = new com.google.protobuf.UnmodifiableLazyStringList(installedFeatures_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationDataDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationDataDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OperationDataDetails.class, com.impinj.stp.StpApi.OperationDataDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<OperationDataDetails> PARSER =
        new com.google.protobuf.AbstractParser<OperationDataDetails>() {
      public OperationDataDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OperationDataDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OperationDataDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string serial_number = 1;
    public static final int SERIAL_NUMBER_FIELD_NUMBER = 1;
    private java.lang.Object serialNumber_;
    /**
     */
    public boolean hasSerialNumber() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public java.lang.String getSerialNumber() {
      java.lang.Object ref = serialNumber_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          serialNumber_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getSerialNumberBytes() {
      java.lang.Object ref = serialNumber_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        serialNumber_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string firmware_version = 2;
    public static final int FIRMWARE_VERSION_FIELD_NUMBER = 2;
    private java.lang.Object firmwareVersion_;
    /**
     */
    public boolean hasFirmwareVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public java.lang.String getFirmwareVersion() {
      java.lang.Object ref = firmwareVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          firmwareVersion_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getFirmwareVersionBytes() {
      java.lang.Object ref = firmwareVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        firmwareVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string region = 3;
    public static final int REGION_FIELD_NUMBER = 3;
    private java.lang.Object region_;
    /**
     */
    public boolean hasRegion() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public java.lang.String getRegion() {
      java.lang.Object ref = region_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          region_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getRegionBytes() {
      java.lang.Object ref = region_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        region_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string installed_features = 4;
    public static final int INSTALLED_FEATURES_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList installedFeatures_;
    /**
     */
    public java.util.List<java.lang.String>
        getInstalledFeaturesList() {
      return installedFeatures_;
    }
    /**
     */
    public int getInstalledFeaturesCount() {
      return installedFeatures_.size();
    }
    /**
     */
    public java.lang.String getInstalledFeatures(int index) {
      return installedFeatures_.get(index);
    }
    /**
     */
    public com.google.protobuf.ByteString
        getInstalledFeaturesBytes(int index) {
      return installedFeatures_.getByteString(index);
    }

    // optional uint32 non_monza_volume_key_id = 5;
    public static final int NON_MONZA_VOLUME_KEY_ID_FIELD_NUMBER = 5;
    private int nonMonzaVolumeKeyId_;
    /**
     */
    public boolean hasNonMonzaVolumeKeyId() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public int getNonMonzaVolumeKeyId() {
      return nonMonzaVolumeKeyId_;
    }

    // optional .Impinj.STP.OperationMetrics operation_metrics = 6;
    public static final int OPERATION_METRICS_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.OperationMetrics operationMetrics_;
    /**
     */
    public boolean hasOperationMetrics() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationMetrics getOperationMetrics() {
      return operationMetrics_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationMetricsOrBuilder getOperationMetricsOrBuilder() {
      return operationMetrics_;
    }

    // optional uint32 monza_volume_key_id = 7;
    public static final int MONZA_VOLUME_KEY_ID_FIELD_NUMBER = 7;
    private int monzaVolumeKeyId_;
    /**
     */
    public boolean hasMonzaVolumeKeyId() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public int getMonzaVolumeKeyId() {
      return monzaVolumeKeyId_;
    }

    private void initFields() {
      serialNumber_ = "";
      firmwareVersion_ = "";
      region_ = "";
      installedFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      nonMonzaVolumeKeyId_ = 0;
      operationMetrics_ = com.impinj.stp.StpApi.OperationMetrics.getDefaultInstance();
      monzaVolumeKeyId_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getSerialNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getFirmwareVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getRegionBytes());
      }
      for (int i = 0; i < installedFeatures_.size(); i++) {
        output.writeBytes(4, installedFeatures_.getByteString(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(5, nonMonzaVolumeKeyId_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(6, operationMetrics_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt32(7, monzaVolumeKeyId_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getSerialNumberBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getFirmwareVersionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getRegionBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < installedFeatures_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(installedFeatures_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getInstalledFeaturesList().size();
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, nonMonzaVolumeKeyId_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, operationMetrics_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, monzaVolumeKeyId_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationDataDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OperationDataDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OperationDataDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OperationDataDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationDataDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationDataDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OperationDataDetails.class, com.impinj.stp.StpApi.OperationDataDetails.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OperationDataDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOperationMetricsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        serialNumber_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        firmwareVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        region_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        installedFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        nonMonzaVolumeKeyId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (operationMetricsBuilder_ == null) {
          operationMetrics_ = com.impinj.stp.StpApi.OperationMetrics.getDefaultInstance();
        } else {
          operationMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        monzaVolumeKeyId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationDataDetails_descriptor;
      }

      public com.impinj.stp.StpApi.OperationDataDetails getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OperationDataDetails.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OperationDataDetails build() {
        com.impinj.stp.StpApi.OperationDataDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OperationDataDetails buildPartial() {
        com.impinj.stp.StpApi.OperationDataDetails result = new com.impinj.stp.StpApi.OperationDataDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.serialNumber_ = serialNumber_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.firmwareVersion_ = firmwareVersion_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.region_ = region_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          installedFeatures_ = new com.google.protobuf.UnmodifiableLazyStringList(
              installedFeatures_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.installedFeatures_ = installedFeatures_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.nonMonzaVolumeKeyId_ = nonMonzaVolumeKeyId_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        if (operationMetricsBuilder_ == null) {
          result.operationMetrics_ = operationMetrics_;
        } else {
          result.operationMetrics_ = operationMetricsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.monzaVolumeKeyId_ = monzaVolumeKeyId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OperationDataDetails) {
          return mergeFrom((com.impinj.stp.StpApi.OperationDataDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OperationDataDetails other) {
        if (other == com.impinj.stp.StpApi.OperationDataDetails.getDefaultInstance()) return this;
        if (other.hasSerialNumber()) {
          bitField0_ |= 0x00000001;
          serialNumber_ = other.serialNumber_;
          onChanged();
        }
        if (other.hasFirmwareVersion()) {
          bitField0_ |= 0x00000002;
          firmwareVersion_ = other.firmwareVersion_;
          onChanged();
        }
        if (other.hasRegion()) {
          bitField0_ |= 0x00000004;
          region_ = other.region_;
          onChanged();
        }
        if (!other.installedFeatures_.isEmpty()) {
          if (installedFeatures_.isEmpty()) {
            installedFeatures_ = other.installedFeatures_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureInstalledFeaturesIsMutable();
            installedFeatures_.addAll(other.installedFeatures_);
          }
          onChanged();
        }
        if (other.hasNonMonzaVolumeKeyId()) {
          setNonMonzaVolumeKeyId(other.getNonMonzaVolumeKeyId());
        }
        if (other.hasOperationMetrics()) {
          mergeOperationMetrics(other.getOperationMetrics());
        }
        if (other.hasMonzaVolumeKeyId()) {
          setMonzaVolumeKeyId(other.getMonzaVolumeKeyId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OperationDataDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OperationDataDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string serial_number = 1;
      private java.lang.Object serialNumber_ = "";
      /**
       */
      public boolean hasSerialNumber() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public java.lang.String getSerialNumber() {
        java.lang.Object ref = serialNumber_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          serialNumber_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getSerialNumberBytes() {
        java.lang.Object ref = serialNumber_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          serialNumber_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setSerialNumber(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        serialNumber_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearSerialNumber() {
        bitField0_ = (bitField0_ & ~0x00000001);
        serialNumber_ = getDefaultInstance().getSerialNumber();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setSerialNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        serialNumber_ = value;
        onChanged();
        return this;
      }

      // optional string firmware_version = 2;
      private java.lang.Object firmwareVersion_ = "";
      /**
       */
      public boolean hasFirmwareVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public java.lang.String getFirmwareVersion() {
        java.lang.Object ref = firmwareVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          firmwareVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getFirmwareVersionBytes() {
        java.lang.Object ref = firmwareVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          firmwareVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setFirmwareVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        firmwareVersion_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearFirmwareVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        firmwareVersion_ = getDefaultInstance().getFirmwareVersion();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setFirmwareVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        firmwareVersion_ = value;
        onChanged();
        return this;
      }

      // optional string region = 3;
      private java.lang.Object region_ = "";
      /**
       */
      public boolean hasRegion() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public java.lang.String getRegion() {
        java.lang.Object ref = region_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          region_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getRegionBytes() {
        java.lang.Object ref = region_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          region_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setRegion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        region_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearRegion() {
        bitField0_ = (bitField0_ & ~0x00000004);
        region_ = getDefaultInstance().getRegion();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setRegionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        region_ = value;
        onChanged();
        return this;
      }

      // repeated string installed_features = 4;
      private com.google.protobuf.LazyStringList installedFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureInstalledFeaturesIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          installedFeatures_ = new com.google.protobuf.LazyStringArrayList(installedFeatures_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       */
      public java.util.List<java.lang.String>
          getInstalledFeaturesList() {
        return java.util.Collections.unmodifiableList(installedFeatures_);
      }
      /**
       */
      public int getInstalledFeaturesCount() {
        return installedFeatures_.size();
      }
      /**
       */
      public java.lang.String getInstalledFeatures(int index) {
        return installedFeatures_.get(index);
      }
      /**
       */
      public com.google.protobuf.ByteString
          getInstalledFeaturesBytes(int index) {
        return installedFeatures_.getByteString(index);
      }
      /**
       */
      public Builder setInstalledFeatures(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInstalledFeaturesIsMutable();
        installedFeatures_.set(index, value);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addInstalledFeatures(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInstalledFeaturesIsMutable();
        installedFeatures_.add(value);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addAllInstalledFeatures(
          java.lang.Iterable<java.lang.String> values) {
        ensureInstalledFeaturesIsMutable();
        super.addAll(values, installedFeatures_);
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearInstalledFeatures() {
        installedFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addInstalledFeaturesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureInstalledFeaturesIsMutable();
        installedFeatures_.add(value);
        onChanged();
        return this;
      }

      // optional uint32 non_monza_volume_key_id = 5;
      private int nonMonzaVolumeKeyId_ ;
      /**
       */
      public boolean hasNonMonzaVolumeKeyId() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public int getNonMonzaVolumeKeyId() {
        return nonMonzaVolumeKeyId_;
      }
      /**
       */
      public Builder setNonMonzaVolumeKeyId(int value) {
        bitField0_ |= 0x00000010;
        nonMonzaVolumeKeyId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearNonMonzaVolumeKeyId() {
        bitField0_ = (bitField0_ & ~0x00000010);
        nonMonzaVolumeKeyId_ = 0;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.OperationMetrics operation_metrics = 6;
      private com.impinj.stp.StpApi.OperationMetrics operationMetrics_ = com.impinj.stp.StpApi.OperationMetrics.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationMetrics, com.impinj.stp.StpApi.OperationMetrics.Builder, com.impinj.stp.StpApi.OperationMetricsOrBuilder> operationMetricsBuilder_;
      /**
       */
      public boolean hasOperationMetrics() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationMetrics getOperationMetrics() {
        if (operationMetricsBuilder_ == null) {
          return operationMetrics_;
        } else {
          return operationMetricsBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOperationMetrics(com.impinj.stp.StpApi.OperationMetrics value) {
        if (operationMetricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          operationMetrics_ = value;
          onChanged();
        } else {
          operationMetricsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setOperationMetrics(
          com.impinj.stp.StpApi.OperationMetrics.Builder builderForValue) {
        if (operationMetricsBuilder_ == null) {
          operationMetrics_ = builderForValue.build();
          onChanged();
        } else {
          operationMetricsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeOperationMetrics(com.impinj.stp.StpApi.OperationMetrics value) {
        if (operationMetricsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              operationMetrics_ != com.impinj.stp.StpApi.OperationMetrics.getDefaultInstance()) {
            operationMetrics_ =
              com.impinj.stp.StpApi.OperationMetrics.newBuilder(operationMetrics_).mergeFrom(value).buildPartial();
          } else {
            operationMetrics_ = value;
          }
          onChanged();
        } else {
          operationMetricsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearOperationMetrics() {
        if (operationMetricsBuilder_ == null) {
          operationMetrics_ = com.impinj.stp.StpApi.OperationMetrics.getDefaultInstance();
          onChanged();
        } else {
          operationMetricsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationMetrics.Builder getOperationMetricsBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getOperationMetricsFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationMetricsOrBuilder getOperationMetricsOrBuilder() {
        if (operationMetricsBuilder_ != null) {
          return operationMetricsBuilder_.getMessageOrBuilder();
        } else {
          return operationMetrics_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationMetrics, com.impinj.stp.StpApi.OperationMetrics.Builder, com.impinj.stp.StpApi.OperationMetricsOrBuilder> 
          getOperationMetricsFieldBuilder() {
        if (operationMetricsBuilder_ == null) {
          operationMetricsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OperationMetrics, com.impinj.stp.StpApi.OperationMetrics.Builder, com.impinj.stp.StpApi.OperationMetricsOrBuilder>(
                  operationMetrics_,
                  getParentForChildren(),
                  isClean());
          operationMetrics_ = null;
        }
        return operationMetricsBuilder_;
      }

      // optional uint32 monza_volume_key_id = 7;
      private int monzaVolumeKeyId_ ;
      /**
       */
      public boolean hasMonzaVolumeKeyId() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       */
      public int getMonzaVolumeKeyId() {
        return monzaVolumeKeyId_;
      }
      /**
       */
      public Builder setMonzaVolumeKeyId(int value) {
        bitField0_ |= 0x00000040;
        monzaVolumeKeyId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearMonzaVolumeKeyId() {
        bitField0_ = (bitField0_ & ~0x00000040);
        monzaVolumeKeyId_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OperationDataDetails)
    }

    static {
      defaultInstance = new OperationDataDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OperationDataDetails)
  }

  public interface OperationDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.OperationDataDetails operation_details = 1;
    /**
     */
    boolean hasOperationDetails();
    /**
     */
    com.impinj.stp.StpApi.OperationDataDetails getOperationDetails();
    /**
     */
    com.impinj.stp.StpApi.OperationDataDetailsOrBuilder getOperationDetailsOrBuilder();

    // repeated string data = 2;
    /**
     */
    java.util.List<java.lang.String>
    getDataList();
    /**
     */
    int getDataCount();
    /**
     */
    java.lang.String getData(int index);
    /**
     */
    com.google.protobuf.ByteString
        getDataBytes(int index);
  }
  /**
   * Protobuf type {@code Impinj.STP.OperationData}
   */
  public static final class OperationData extends
      com.google.protobuf.GeneratedMessage
      implements OperationDataOrBuilder {
    // Use OperationData.newBuilder() to construct.
    private OperationData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OperationData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OperationData defaultInstance;
    public static OperationData getDefaultInstance() {
      return defaultInstance;
    }

    public OperationData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OperationData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.OperationDataDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = operationDetails_.toBuilder();
              }
              operationDetails_ = input.readMessage(com.impinj.stp.StpApi.OperationDataDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(operationDetails_);
                operationDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                data_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              data_.add(input.readBytes());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          data_ = new com.google.protobuf.UnmodifiableLazyStringList(data_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OperationData.class, com.impinj.stp.StpApi.OperationData.Builder.class);
    }

    public static com.google.protobuf.Parser<OperationData> PARSER =
        new com.google.protobuf.AbstractParser<OperationData>() {
      public OperationData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OperationData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OperationData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.OperationDataDetails operation_details = 1;
    public static final int OPERATION_DETAILS_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.OperationDataDetails operationDetails_;
    /**
     */
    public boolean hasOperationDetails() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationDataDetails getOperationDetails() {
      return operationDetails_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationDataDetailsOrBuilder getOperationDetailsOrBuilder() {
      return operationDetails_;
    }

    // repeated string data = 2;
    public static final int DATA_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList data_;
    /**
     */
    public java.util.List<java.lang.String>
        getDataList() {
      return data_;
    }
    /**
     */
    public int getDataCount() {
      return data_.size();
    }
    /**
     */
    public java.lang.String getData(int index) {
      return data_.get(index);
    }
    /**
     */
    public com.google.protobuf.ByteString
        getDataBytes(int index) {
      return data_.getByteString(index);
    }

    private void initFields() {
      operationDetails_ = com.impinj.stp.StpApi.OperationDataDetails.getDefaultInstance();
      data_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, operationDetails_);
      }
      for (int i = 0; i < data_.size(); i++) {
        output.writeBytes(2, data_.getByteString(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, operationDetails_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < data_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(data_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getDataList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OperationData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OperationData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OperationData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OperationDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OperationData.class, com.impinj.stp.StpApi.OperationData.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OperationData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOperationDetailsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (operationDetailsBuilder_ == null) {
          operationDetails_ = com.impinj.stp.StpApi.OperationDataDetails.getDefaultInstance();
        } else {
          operationDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationData_descriptor;
      }

      public com.impinj.stp.StpApi.OperationData getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OperationData.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OperationData build() {
        com.impinj.stp.StpApi.OperationData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OperationData buildPartial() {
        com.impinj.stp.StpApi.OperationData result = new com.impinj.stp.StpApi.OperationData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (operationDetailsBuilder_ == null) {
          result.operationDetails_ = operationDetails_;
        } else {
          result.operationDetails_ = operationDetailsBuilder_.build();
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          data_ = new com.google.protobuf.UnmodifiableLazyStringList(
              data_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.data_ = data_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OperationData) {
          return mergeFrom((com.impinj.stp.StpApi.OperationData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OperationData other) {
        if (other == com.impinj.stp.StpApi.OperationData.getDefaultInstance()) return this;
        if (other.hasOperationDetails()) {
          mergeOperationDetails(other.getOperationDetails());
        }
        if (!other.data_.isEmpty()) {
          if (data_.isEmpty()) {
            data_ = other.data_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureDataIsMutable();
            data_.addAll(other.data_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OperationData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OperationData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.OperationDataDetails operation_details = 1;
      private com.impinj.stp.StpApi.OperationDataDetails operationDetails_ = com.impinj.stp.StpApi.OperationDataDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationDataDetails, com.impinj.stp.StpApi.OperationDataDetails.Builder, com.impinj.stp.StpApi.OperationDataDetailsOrBuilder> operationDetailsBuilder_;
      /**
       */
      public boolean hasOperationDetails() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationDataDetails getOperationDetails() {
        if (operationDetailsBuilder_ == null) {
          return operationDetails_;
        } else {
          return operationDetailsBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOperationDetails(com.impinj.stp.StpApi.OperationDataDetails value) {
        if (operationDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          operationDetails_ = value;
          onChanged();
        } else {
          operationDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setOperationDetails(
          com.impinj.stp.StpApi.OperationDataDetails.Builder builderForValue) {
        if (operationDetailsBuilder_ == null) {
          operationDetails_ = builderForValue.build();
          onChanged();
        } else {
          operationDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeOperationDetails(com.impinj.stp.StpApi.OperationDataDetails value) {
        if (operationDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              operationDetails_ != com.impinj.stp.StpApi.OperationDataDetails.getDefaultInstance()) {
            operationDetails_ =
              com.impinj.stp.StpApi.OperationDataDetails.newBuilder(operationDetails_).mergeFrom(value).buildPartial();
          } else {
            operationDetails_ = value;
          }
          onChanged();
        } else {
          operationDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearOperationDetails() {
        if (operationDetailsBuilder_ == null) {
          operationDetails_ = com.impinj.stp.StpApi.OperationDataDetails.getDefaultInstance();
          onChanged();
        } else {
          operationDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationDataDetails.Builder getOperationDetailsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getOperationDetailsFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationDataDetailsOrBuilder getOperationDetailsOrBuilder() {
        if (operationDetailsBuilder_ != null) {
          return operationDetailsBuilder_.getMessageOrBuilder();
        } else {
          return operationDetails_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationDataDetails, com.impinj.stp.StpApi.OperationDataDetails.Builder, com.impinj.stp.StpApi.OperationDataDetailsOrBuilder> 
          getOperationDetailsFieldBuilder() {
        if (operationDetailsBuilder_ == null) {
          operationDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OperationDataDetails, com.impinj.stp.StpApi.OperationDataDetails.Builder, com.impinj.stp.StpApi.OperationDataDetailsOrBuilder>(
                  operationDetails_,
                  getParentForChildren(),
                  isClean());
          operationDetails_ = null;
        }
        return operationDetailsBuilder_;
      }

      // repeated string data = 2;
      private com.google.protobuf.LazyStringList data_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDataIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          data_ = new com.google.protobuf.LazyStringArrayList(data_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       */
      public java.util.List<java.lang.String>
          getDataList() {
        return java.util.Collections.unmodifiableList(data_);
      }
      /**
       */
      public int getDataCount() {
        return data_.size();
      }
      /**
       */
      public java.lang.String getData(int index) {
        return data_.get(index);
      }
      /**
       */
      public com.google.protobuf.ByteString
          getDataBytes(int index) {
        return data_.getByteString(index);
      }
      /**
       */
      public Builder setData(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDataIsMutable();
        data_.set(index, value);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addData(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDataIsMutable();
        data_.add(value);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addAllData(
          java.lang.Iterable<java.lang.String> values) {
        ensureDataIsMutable();
        super.addAll(values, data_);
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearData() {
        data_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       */
      public Builder addDataBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDataIsMutable();
        data_.add(value);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OperationData)
    }

    static {
      defaultInstance = new OperationData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OperationData)
  }

  public interface LicenseKeyOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required bytes license_key_payload = 1;
    /**
     */
    boolean hasLicenseKeyPayload();
    /**
     */
    com.google.protobuf.ByteString getLicenseKeyPayload();
  }
  /**
   * Protobuf type {@code Impinj.STP.LicenseKey}
   */
  public static final class LicenseKey extends
      com.google.protobuf.GeneratedMessage
      implements LicenseKeyOrBuilder {
    // Use LicenseKey.newBuilder() to construct.
    private LicenseKey(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LicenseKey(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LicenseKey defaultInstance;
    public static LicenseKey getDefaultInstance() {
      return defaultInstance;
    }

    public LicenseKey getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LicenseKey(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              licenseKeyPayload_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LicenseKey_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LicenseKey_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.LicenseKey.class, com.impinj.stp.StpApi.LicenseKey.Builder.class);
    }

    public static com.google.protobuf.Parser<LicenseKey> PARSER =
        new com.google.protobuf.AbstractParser<LicenseKey>() {
      public LicenseKey parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LicenseKey(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LicenseKey> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required bytes license_key_payload = 1;
    public static final int LICENSE_KEY_PAYLOAD_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString licenseKeyPayload_;
    /**
     */
    public boolean hasLicenseKeyPayload() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.google.protobuf.ByteString getLicenseKeyPayload() {
      return licenseKeyPayload_;
    }

    private void initFields() {
      licenseKeyPayload_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasLicenseKeyPayload()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, licenseKeyPayload_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, licenseKeyPayload_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.LicenseKey parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LicenseKey parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.LicenseKey prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.LicenseKey}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.LicenseKeyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LicenseKey_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LicenseKey_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.LicenseKey.class, com.impinj.stp.StpApi.LicenseKey.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.LicenseKey.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        licenseKeyPayload_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LicenseKey_descriptor;
      }

      public com.impinj.stp.StpApi.LicenseKey getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.LicenseKey.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.LicenseKey build() {
        com.impinj.stp.StpApi.LicenseKey result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.LicenseKey buildPartial() {
        com.impinj.stp.StpApi.LicenseKey result = new com.impinj.stp.StpApi.LicenseKey(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.licenseKeyPayload_ = licenseKeyPayload_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.LicenseKey) {
          return mergeFrom((com.impinj.stp.StpApi.LicenseKey)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.LicenseKey other) {
        if (other == com.impinj.stp.StpApi.LicenseKey.getDefaultInstance()) return this;
        if (other.hasLicenseKeyPayload()) {
          setLicenseKeyPayload(other.getLicenseKeyPayload());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasLicenseKeyPayload()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.LicenseKey parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.LicenseKey) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required bytes license_key_payload = 1;
      private com.google.protobuf.ByteString licenseKeyPayload_ = com.google.protobuf.ByteString.EMPTY;
      /**
       */
      public boolean hasLicenseKeyPayload() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.google.protobuf.ByteString getLicenseKeyPayload() {
        return licenseKeyPayload_;
      }
      /**
       */
      public Builder setLicenseKeyPayload(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        licenseKeyPayload_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearLicenseKeyPayload() {
        bitField0_ = (bitField0_ & ~0x00000001);
        licenseKeyPayload_ = getDefaultInstance().getLicenseKeyPayload();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.LicenseKey)
    }

    static {
      defaultInstance = new LicenseKey(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.LicenseKey)
  }

  public interface OperationEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.Timestamp timestamp = 1;
    /**
     */
    boolean hasTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder();

    // required .Impinj.STP.OperationEventType operation_event_type = 2;
    /**
     */
    boolean hasOperationEventType();
    /**
     */
    com.impinj.stp.StpApi.OperationEventType getOperationEventType();

    // optional .Impinj.STP.OperationTriggerType operation_trigger_type = 3;
    /**
     */
    boolean hasOperationTriggerType();
    /**
     */
    com.impinj.stp.StpApi.OperationTriggerType getOperationTriggerType();
  }
  /**
   * Protobuf type {@code Impinj.STP.OperationEvent}
   *
   * **NOT YET SUPPORTED** A change in the device operating state
   * driven by completion of the tag operation or a start or stop
   * driven by GPI.
   */
  public static final class OperationEvent extends
      com.google.protobuf.GeneratedMessage
      implements OperationEventOrBuilder {
    // Use OperationEvent.newBuilder() to construct.
    private OperationEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OperationEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OperationEvent defaultInstance;
    public static OperationEvent getDefaultInstance() {
      return defaultInstance;
    }

    public OperationEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OperationEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = timestamp_.toBuilder();
              }
              timestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(timestamp_);
                timestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.OperationEventType value = com.impinj.stp.StpApi.OperationEventType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                operationEventType_ = value;
              }
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.OperationTriggerType value = com.impinj.stp.StpApi.OperationTriggerType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                operationTriggerType_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.OperationEvent.class, com.impinj.stp.StpApi.OperationEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<OperationEvent> PARSER =
        new com.google.protobuf.AbstractParser<OperationEvent>() {
      public OperationEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OperationEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OperationEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.Timestamp timestamp = 1;
    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Timestamp timestamp_;
    /**
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getTimestamp() {
      return timestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
      return timestamp_;
    }

    // required .Impinj.STP.OperationEventType operation_event_type = 2;
    public static final int OPERATION_EVENT_TYPE_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.OperationEventType operationEventType_;
    /**
     */
    public boolean hasOperationEventType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationEventType getOperationEventType() {
      return operationEventType_;
    }

    // optional .Impinj.STP.OperationTriggerType operation_trigger_type = 3;
    public static final int OPERATION_TRIGGER_TYPE_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.OperationTriggerType operationTriggerType_;
    /**
     */
    public boolean hasOperationTriggerType() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationTriggerType getOperationTriggerType() {
      return operationTriggerType_;
    }

    private void initFields() {
      timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      operationEventType_ = com.impinj.stp.StpApi.OperationEventType.OPERATION_EVENT_TYPE_START_TRIGGER;
      operationTriggerType_ = com.impinj.stp.StpApi.OperationTriggerType.OPERATION_TRIGGER_TYPE_CLIENT;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasTimestamp()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasOperationEventType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, operationEventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(3, operationTriggerType_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, operationEventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, operationTriggerType_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.OperationEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.OperationEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.OperationEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.OperationEvent}
     *
     * **NOT YET SUPPORTED** A change in the device operating state
     * driven by completion of the tag operation or a start or stop
     * driven by GPI.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.OperationEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.OperationEvent.class, com.impinj.stp.StpApi.OperationEvent.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.OperationEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTimestampFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        operationEventType_ = com.impinj.stp.StpApi.OperationEventType.OPERATION_EVENT_TYPE_START_TRIGGER;
        bitField0_ = (bitField0_ & ~0x00000002);
        operationTriggerType_ = com.impinj.stp.StpApi.OperationTriggerType.OPERATION_TRIGGER_TYPE_CLIENT;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_OperationEvent_descriptor;
      }

      public com.impinj.stp.StpApi.OperationEvent getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.OperationEvent.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.OperationEvent build() {
        com.impinj.stp.StpApi.OperationEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.OperationEvent buildPartial() {
        com.impinj.stp.StpApi.OperationEvent result = new com.impinj.stp.StpApi.OperationEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (timestampBuilder_ == null) {
          result.timestamp_ = timestamp_;
        } else {
          result.timestamp_ = timestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.operationEventType_ = operationEventType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.operationTriggerType_ = operationTriggerType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.OperationEvent) {
          return mergeFrom((com.impinj.stp.StpApi.OperationEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.OperationEvent other) {
        if (other == com.impinj.stp.StpApi.OperationEvent.getDefaultInstance()) return this;
        if (other.hasTimestamp()) {
          mergeTimestamp(other.getTimestamp());
        }
        if (other.hasOperationEventType()) {
          setOperationEventType(other.getOperationEventType());
        }
        if (other.hasOperationTriggerType()) {
          setOperationTriggerType(other.getOperationTriggerType());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasTimestamp()) {
          
          return false;
        }
        if (!hasOperationEventType()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.OperationEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.OperationEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.Timestamp timestamp = 1;
      private com.impinj.stp.StpApi.Timestamp timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> timestampBuilder_;
      /**
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getTimestamp() {
        if (timestampBuilder_ == null) {
          return timestamp_;
        } else {
          return timestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          timestamp_ = value;
          onChanged();
        } else {
          timestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (timestampBuilder_ == null) {
          timestamp_ = builderForValue.build();
          onChanged();
        } else {
          timestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              timestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            timestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
          } else {
            timestamp_ = value;
          }
          onChanged();
        } else {
          timestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearTimestamp() {
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getTimestampBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
        if (timestampBuilder_ != null) {
          return timestampBuilder_.getMessageOrBuilder();
        } else {
          return timestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getTimestampFieldBuilder() {
        if (timestampBuilder_ == null) {
          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  timestamp_,
                  getParentForChildren(),
                  isClean());
          timestamp_ = null;
        }
        return timestampBuilder_;
      }

      // required .Impinj.STP.OperationEventType operation_event_type = 2;
      private com.impinj.stp.StpApi.OperationEventType operationEventType_ = com.impinj.stp.StpApi.OperationEventType.OPERATION_EVENT_TYPE_START_TRIGGER;
      /**
       */
      public boolean hasOperationEventType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationEventType getOperationEventType() {
        return operationEventType_;
      }
      /**
       */
      public Builder setOperationEventType(com.impinj.stp.StpApi.OperationEventType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        operationEventType_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearOperationEventType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        operationEventType_ = com.impinj.stp.StpApi.OperationEventType.OPERATION_EVENT_TYPE_START_TRIGGER;
        onChanged();
        return this;
      }

      // optional .Impinj.STP.OperationTriggerType operation_trigger_type = 3;
      private com.impinj.stp.StpApi.OperationTriggerType operationTriggerType_ = com.impinj.stp.StpApi.OperationTriggerType.OPERATION_TRIGGER_TYPE_CLIENT;
      /**
       */
      public boolean hasOperationTriggerType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationTriggerType getOperationTriggerType() {
        return operationTriggerType_;
      }
      /**
       */
      public Builder setOperationTriggerType(com.impinj.stp.StpApi.OperationTriggerType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        operationTriggerType_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearOperationTriggerType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        operationTriggerType_ = com.impinj.stp.StpApi.OperationTriggerType.OPERATION_TRIGGER_TYPE_CLIENT;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.OperationEvent)
    }

    static {
      defaultInstance = new OperationEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.OperationEvent)
  }

  public interface DeviceExceptionEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.Timestamp timestamp = 1;
    /**
     */
    boolean hasTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder();

    // required .Impinj.STP.DeviceExceptionEventType device_exception_event_type = 2;
    /**
     */
    boolean hasDeviceExceptionEventType();
    /**
     */
    com.impinj.stp.StpApi.DeviceExceptionEventType getDeviceExceptionEventType();

    // required string exception_detail = 3;
    /**
     */
    boolean hasExceptionDetail();
    /**
     */
    java.lang.String getExceptionDetail();
    /**
     */
    com.google.protobuf.ByteString
        getExceptionDetailBytes();
  }
  /**
   * Protobuf type {@code Impinj.STP.DeviceExceptionEvent}
   *
   * **NOT YET SUPPORTED**
   */
  public static final class DeviceExceptionEvent extends
      com.google.protobuf.GeneratedMessage
      implements DeviceExceptionEventOrBuilder {
    // Use DeviceExceptionEvent.newBuilder() to construct.
    private DeviceExceptionEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeviceExceptionEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DeviceExceptionEvent defaultInstance;
    public static DeviceExceptionEvent getDefaultInstance() {
      return defaultInstance;
    }

    public DeviceExceptionEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceExceptionEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = timestamp_.toBuilder();
              }
              timestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(timestamp_);
                timestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.DeviceExceptionEventType value = com.impinj.stp.StpApi.DeviceExceptionEventType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                deviceExceptionEventType_ = value;
              }
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              exceptionDetail_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceExceptionEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceExceptionEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.DeviceExceptionEvent.class, com.impinj.stp.StpApi.DeviceExceptionEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<DeviceExceptionEvent> PARSER =
        new com.google.protobuf.AbstractParser<DeviceExceptionEvent>() {
      public DeviceExceptionEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeviceExceptionEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DeviceExceptionEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.Timestamp timestamp = 1;
    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Timestamp timestamp_;
    /**
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getTimestamp() {
      return timestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
      return timestamp_;
    }

    // required .Impinj.STP.DeviceExceptionEventType device_exception_event_type = 2;
    public static final int DEVICE_EXCEPTION_EVENT_TYPE_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.DeviceExceptionEventType deviceExceptionEventType_;
    /**
     */
    public boolean hasDeviceExceptionEventType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceExceptionEventType getDeviceExceptionEventType() {
      return deviceExceptionEventType_;
    }

    // required string exception_detail = 3;
    public static final int EXCEPTION_DETAIL_FIELD_NUMBER = 3;
    private java.lang.Object exceptionDetail_;
    /**
     */
    public boolean hasExceptionDetail() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public java.lang.String getExceptionDetail() {
      java.lang.Object ref = exceptionDetail_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          exceptionDetail_ = s;
        }
        return s;
      }
    }
    /**
     */
    public com.google.protobuf.ByteString
        getExceptionDetailBytes() {
      java.lang.Object ref = exceptionDetail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        exceptionDetail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      deviceExceptionEventType_ = com.impinj.stp.StpApi.DeviceExceptionEventType.DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN;
      exceptionDetail_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasTimestamp()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDeviceExceptionEventType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasExceptionDetail()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, deviceExceptionEventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getExceptionDetailBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, deviceExceptionEventType_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getExceptionDetailBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceExceptionEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.DeviceExceptionEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.DeviceExceptionEvent}
     *
     * **NOT YET SUPPORTED**
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.DeviceExceptionEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceExceptionEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceExceptionEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.DeviceExceptionEvent.class, com.impinj.stp.StpApi.DeviceExceptionEvent.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.DeviceExceptionEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTimestampFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        deviceExceptionEventType_ = com.impinj.stp.StpApi.DeviceExceptionEventType.DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN;
        bitField0_ = (bitField0_ & ~0x00000002);
        exceptionDetail_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceExceptionEvent_descriptor;
      }

      public com.impinj.stp.StpApi.DeviceExceptionEvent getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.DeviceExceptionEvent.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.DeviceExceptionEvent build() {
        com.impinj.stp.StpApi.DeviceExceptionEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.DeviceExceptionEvent buildPartial() {
        com.impinj.stp.StpApi.DeviceExceptionEvent result = new com.impinj.stp.StpApi.DeviceExceptionEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (timestampBuilder_ == null) {
          result.timestamp_ = timestamp_;
        } else {
          result.timestamp_ = timestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.deviceExceptionEventType_ = deviceExceptionEventType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.exceptionDetail_ = exceptionDetail_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.DeviceExceptionEvent) {
          return mergeFrom((com.impinj.stp.StpApi.DeviceExceptionEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.DeviceExceptionEvent other) {
        if (other == com.impinj.stp.StpApi.DeviceExceptionEvent.getDefaultInstance()) return this;
        if (other.hasTimestamp()) {
          mergeTimestamp(other.getTimestamp());
        }
        if (other.hasDeviceExceptionEventType()) {
          setDeviceExceptionEventType(other.getDeviceExceptionEventType());
        }
        if (other.hasExceptionDetail()) {
          bitField0_ |= 0x00000004;
          exceptionDetail_ = other.exceptionDetail_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasTimestamp()) {
          
          return false;
        }
        if (!hasDeviceExceptionEventType()) {
          
          return false;
        }
        if (!hasExceptionDetail()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.DeviceExceptionEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.DeviceExceptionEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.Timestamp timestamp = 1;
      private com.impinj.stp.StpApi.Timestamp timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> timestampBuilder_;
      /**
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getTimestamp() {
        if (timestampBuilder_ == null) {
          return timestamp_;
        } else {
          return timestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          timestamp_ = value;
          onChanged();
        } else {
          timestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (timestampBuilder_ == null) {
          timestamp_ = builderForValue.build();
          onChanged();
        } else {
          timestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              timestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            timestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
          } else {
            timestamp_ = value;
          }
          onChanged();
        } else {
          timestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearTimestamp() {
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getTimestampBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
        if (timestampBuilder_ != null) {
          return timestampBuilder_.getMessageOrBuilder();
        } else {
          return timestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getTimestampFieldBuilder() {
        if (timestampBuilder_ == null) {
          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  timestamp_,
                  getParentForChildren(),
                  isClean());
          timestamp_ = null;
        }
        return timestampBuilder_;
      }

      // required .Impinj.STP.DeviceExceptionEventType device_exception_event_type = 2;
      private com.impinj.stp.StpApi.DeviceExceptionEventType deviceExceptionEventType_ = com.impinj.stp.StpApi.DeviceExceptionEventType.DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN;
      /**
       */
      public boolean hasDeviceExceptionEventType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceExceptionEventType getDeviceExceptionEventType() {
        return deviceExceptionEventType_;
      }
      /**
       */
      public Builder setDeviceExceptionEventType(com.impinj.stp.StpApi.DeviceExceptionEventType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        deviceExceptionEventType_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearDeviceExceptionEventType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        deviceExceptionEventType_ = com.impinj.stp.StpApi.DeviceExceptionEventType.DEVICE_EXCEPTION_EVENT_TYPE_UNKNOWN;
        onChanged();
        return this;
      }

      // required string exception_detail = 3;
      private java.lang.Object exceptionDetail_ = "";
      /**
       */
      public boolean hasExceptionDetail() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public java.lang.String getExceptionDetail() {
        java.lang.Object ref = exceptionDetail_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          exceptionDetail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       */
      public com.google.protobuf.ByteString
          getExceptionDetailBytes() {
        java.lang.Object ref = exceptionDetail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          exceptionDetail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       */
      public Builder setExceptionDetail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        exceptionDetail_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearExceptionDetail() {
        bitField0_ = (bitField0_ & ~0x00000004);
        exceptionDetail_ = getDefaultInstance().getExceptionDetail();
        onChanged();
        return this;
      }
      /**
       */
      public Builder setExceptionDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        exceptionDetail_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.DeviceExceptionEvent)
    }

    static {
      defaultInstance = new DeviceExceptionEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.DeviceExceptionEvent)
  }

  public interface GPIEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.Timestamp timestamp = 1;
    /**
     */
    boolean hasTimestamp();
    /**
     */
    com.impinj.stp.StpApi.Timestamp getTimestamp();
    /**
     */
    com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder();

    // required uint32 gpi_state = 2;
    /**
     */
    boolean hasGpiState();
    /**
     */
    int getGpiState();
  }
  /**
   * Protobuf type {@code Impinj.STP.GPIEvent}
   *
   * Generated when any of the gpi inputs change
   */
  public static final class GPIEvent extends
      com.google.protobuf.GeneratedMessage
      implements GPIEventOrBuilder {
    // Use GPIEvent.newBuilder() to construct.
    private GPIEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GPIEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GPIEvent defaultInstance;
    public static GPIEvent getDefaultInstance() {
      return defaultInstance;
    }

    public GPIEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GPIEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Timestamp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = timestamp_.toBuilder();
              }
              timestamp_ = input.readMessage(com.impinj.stp.StpApi.Timestamp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(timestamp_);
                timestamp_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              gpiState_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GPIEvent.class, com.impinj.stp.StpApi.GPIEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<GPIEvent> PARSER =
        new com.google.protobuf.AbstractParser<GPIEvent>() {
      public GPIEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GPIEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GPIEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.Timestamp timestamp = 1;
    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Timestamp timestamp_;
    /**
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Timestamp getTimestamp() {
      return timestamp_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
      return timestamp_;
    }

    // required uint32 gpi_state = 2;
    public static final int GPI_STATE_FIELD_NUMBER = 2;
    private int gpiState_;
    /**
     */
    public boolean hasGpiState() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public int getGpiState() {
      return gpiState_;
    }

    private void initFields() {
      timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      gpiState_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasTimestamp()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasGpiState()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, gpiState_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, timestamp_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, gpiState_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GPIEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GPIEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GPIEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GPIEvent}
     *
     * Generated when any of the gpi inputs change
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GPIEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GPIEvent.class, com.impinj.stp.StpApi.GPIEvent.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GPIEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTimestampFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        gpiState_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GPIEvent_descriptor;
      }

      public com.impinj.stp.StpApi.GPIEvent getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GPIEvent.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GPIEvent build() {
        com.impinj.stp.StpApi.GPIEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GPIEvent buildPartial() {
        com.impinj.stp.StpApi.GPIEvent result = new com.impinj.stp.StpApi.GPIEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (timestampBuilder_ == null) {
          result.timestamp_ = timestamp_;
        } else {
          result.timestamp_ = timestampBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.gpiState_ = gpiState_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GPIEvent) {
          return mergeFrom((com.impinj.stp.StpApi.GPIEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GPIEvent other) {
        if (other == com.impinj.stp.StpApi.GPIEvent.getDefaultInstance()) return this;
        if (other.hasTimestamp()) {
          mergeTimestamp(other.getTimestamp());
        }
        if (other.hasGpiState()) {
          setGpiState(other.getGpiState());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasTimestamp()) {
          
          return false;
        }
        if (!hasGpiState()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GPIEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GPIEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.Timestamp timestamp = 1;
      private com.impinj.stp.StpApi.Timestamp timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> timestampBuilder_;
      /**
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp getTimestamp() {
        if (timestampBuilder_ == null) {
          return timestamp_;
        } else {
          return timestampBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          timestamp_ = value;
          onChanged();
        } else {
          timestampBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setTimestamp(
          com.impinj.stp.StpApi.Timestamp.Builder builderForValue) {
        if (timestampBuilder_ == null) {
          timestamp_ = builderForValue.build();
          onChanged();
        } else {
          timestampBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeTimestamp(com.impinj.stp.StpApi.Timestamp value) {
        if (timestampBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              timestamp_ != com.impinj.stp.StpApi.Timestamp.getDefaultInstance()) {
            timestamp_ =
              com.impinj.stp.StpApi.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
          } else {
            timestamp_ = value;
          }
          onChanged();
        } else {
          timestampBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearTimestamp() {
        if (timestampBuilder_ == null) {
          timestamp_ = com.impinj.stp.StpApi.Timestamp.getDefaultInstance();
          onChanged();
        } else {
          timestampBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Timestamp.Builder getTimestampBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTimestampFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TimestampOrBuilder getTimestampOrBuilder() {
        if (timestampBuilder_ != null) {
          return timestampBuilder_.getMessageOrBuilder();
        } else {
          return timestamp_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder> 
          getTimestampFieldBuilder() {
        if (timestampBuilder_ == null) {
          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Timestamp, com.impinj.stp.StpApi.Timestamp.Builder, com.impinj.stp.StpApi.TimestampOrBuilder>(
                  timestamp_,
                  getParentForChildren(),
                  isClean());
          timestamp_ = null;
        }
        return timestampBuilder_;
      }

      // required uint32 gpi_state = 2;
      private int gpiState_ ;
      /**
       */
      public boolean hasGpiState() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public int getGpiState() {
        return gpiState_;
      }
      /**
       */
      public Builder setGpiState(int value) {
        bitField0_ |= 0x00000002;
        gpiState_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearGpiState() {
        bitField0_ = (bitField0_ & ~0x00000002);
        gpiState_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GPIEvent)
    }

    static {
      defaultInstance = new GPIEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GPIEvent)
  }

  public interface LowEncodeVolumeEventOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.LowEncodeVolumeEventType low_encode_volume_event_type = 1;
    /**
     */
    boolean hasLowEncodeVolumeEventType();
    /**
     */
    com.impinj.stp.StpApi.LowEncodeVolumeEventType getLowEncodeVolumeEventType();

    // optional uint64 remaining_monza_encodes = 2;
    /**
     */
    boolean hasRemainingMonzaEncodes();
    /**
     */
    long getRemainingMonzaEncodes();

    // optional uint64 remaining_non_monza_encodes = 3;
    /**
     */
    boolean hasRemainingNonMonzaEncodes();
    /**
     */
    long getRemainingNonMonzaEncodes();
  }
  /**
   * Protobuf type {@code Impinj.STP.LowEncodeVolumeEvent}
   *
   * Generated when the remaining number of encodes falls below a
   * threshold
   */
  public static final class LowEncodeVolumeEvent extends
      com.google.protobuf.GeneratedMessage
      implements LowEncodeVolumeEventOrBuilder {
    // Use LowEncodeVolumeEvent.newBuilder() to construct.
    private LowEncodeVolumeEvent(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LowEncodeVolumeEvent(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LowEncodeVolumeEvent defaultInstance;
    public static LowEncodeVolumeEvent getDefaultInstance() {
      return defaultInstance;
    }

    public LowEncodeVolumeEvent getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LowEncodeVolumeEvent(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.LowEncodeVolumeEventType value = com.impinj.stp.StpApi.LowEncodeVolumeEventType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                lowEncodeVolumeEventType_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              remainingMonzaEncodes_ = input.readUInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              remainingNonMonzaEncodes_ = input.readUInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEvent_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEvent_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.LowEncodeVolumeEvent.class, com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder.class);
    }

    public static com.google.protobuf.Parser<LowEncodeVolumeEvent> PARSER =
        new com.google.protobuf.AbstractParser<LowEncodeVolumeEvent>() {
      public LowEncodeVolumeEvent parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LowEncodeVolumeEvent(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LowEncodeVolumeEvent> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.LowEncodeVolumeEventType low_encode_volume_event_type = 1;
    public static final int LOW_ENCODE_VOLUME_EVENT_TYPE_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.LowEncodeVolumeEventType lowEncodeVolumeEventType_;
    /**
     */
    public boolean hasLowEncodeVolumeEventType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.LowEncodeVolumeEventType getLowEncodeVolumeEventType() {
      return lowEncodeVolumeEventType_;
    }

    // optional uint64 remaining_monza_encodes = 2;
    public static final int REMAINING_MONZA_ENCODES_FIELD_NUMBER = 2;
    private long remainingMonzaEncodes_;
    /**
     */
    public boolean hasRemainingMonzaEncodes() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public long getRemainingMonzaEncodes() {
      return remainingMonzaEncodes_;
    }

    // optional uint64 remaining_non_monza_encodes = 3;
    public static final int REMAINING_NON_MONZA_ENCODES_FIELD_NUMBER = 3;
    private long remainingNonMonzaEncodes_;
    /**
     */
    public boolean hasRemainingNonMonzaEncodes() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public long getRemainingNonMonzaEncodes() {
      return remainingNonMonzaEncodes_;
    }

    private void initFields() {
      lowEncodeVolumeEventType_ = com.impinj.stp.StpApi.LowEncodeVolumeEventType.LOW_ENCODE_VOLUME_EVENT_MONZA;
      remainingMonzaEncodes_ = 0L;
      remainingNonMonzaEncodes_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, lowEncodeVolumeEventType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(2, remainingMonzaEncodes_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(3, remainingNonMonzaEncodes_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, lowEncodeVolumeEventType_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, remainingMonzaEncodes_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, remainingNonMonzaEncodes_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.LowEncodeVolumeEvent parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.LowEncodeVolumeEvent prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.LowEncodeVolumeEvent}
     *
     * Generated when the remaining number of encodes falls below a
     * threshold
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.LowEncodeVolumeEventOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEvent_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEvent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.LowEncodeVolumeEvent.class, com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.LowEncodeVolumeEvent.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        lowEncodeVolumeEventType_ = com.impinj.stp.StpApi.LowEncodeVolumeEventType.LOW_ENCODE_VOLUME_EVENT_MONZA;
        bitField0_ = (bitField0_ & ~0x00000001);
        remainingMonzaEncodes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        remainingNonMonzaEncodes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_LowEncodeVolumeEvent_descriptor;
      }

      public com.impinj.stp.StpApi.LowEncodeVolumeEvent getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.LowEncodeVolumeEvent.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.LowEncodeVolumeEvent build() {
        com.impinj.stp.StpApi.LowEncodeVolumeEvent result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.LowEncodeVolumeEvent buildPartial() {
        com.impinj.stp.StpApi.LowEncodeVolumeEvent result = new com.impinj.stp.StpApi.LowEncodeVolumeEvent(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.lowEncodeVolumeEventType_ = lowEncodeVolumeEventType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.remainingMonzaEncodes_ = remainingMonzaEncodes_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.remainingNonMonzaEncodes_ = remainingNonMonzaEncodes_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.LowEncodeVolumeEvent) {
          return mergeFrom((com.impinj.stp.StpApi.LowEncodeVolumeEvent)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.LowEncodeVolumeEvent other) {
        if (other == com.impinj.stp.StpApi.LowEncodeVolumeEvent.getDefaultInstance()) return this;
        if (other.hasLowEncodeVolumeEventType()) {
          setLowEncodeVolumeEventType(other.getLowEncodeVolumeEventType());
        }
        if (other.hasRemainingMonzaEncodes()) {
          setRemainingMonzaEncodes(other.getRemainingMonzaEncodes());
        }
        if (other.hasRemainingNonMonzaEncodes()) {
          setRemainingNonMonzaEncodes(other.getRemainingNonMonzaEncodes());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.LowEncodeVolumeEvent parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.LowEncodeVolumeEvent) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.LowEncodeVolumeEventType low_encode_volume_event_type = 1;
      private com.impinj.stp.StpApi.LowEncodeVolumeEventType lowEncodeVolumeEventType_ = com.impinj.stp.StpApi.LowEncodeVolumeEventType.LOW_ENCODE_VOLUME_EVENT_MONZA;
      /**
       */
      public boolean hasLowEncodeVolumeEventType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.LowEncodeVolumeEventType getLowEncodeVolumeEventType() {
        return lowEncodeVolumeEventType_;
      }
      /**
       */
      public Builder setLowEncodeVolumeEventType(com.impinj.stp.StpApi.LowEncodeVolumeEventType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        lowEncodeVolumeEventType_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearLowEncodeVolumeEventType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        lowEncodeVolumeEventType_ = com.impinj.stp.StpApi.LowEncodeVolumeEventType.LOW_ENCODE_VOLUME_EVENT_MONZA;
        onChanged();
        return this;
      }

      // optional uint64 remaining_monza_encodes = 2;
      private long remainingMonzaEncodes_ ;
      /**
       */
      public boolean hasRemainingMonzaEncodes() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public long getRemainingMonzaEncodes() {
        return remainingMonzaEncodes_;
      }
      /**
       */
      public Builder setRemainingMonzaEncodes(long value) {
        bitField0_ |= 0x00000002;
        remainingMonzaEncodes_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearRemainingMonzaEncodes() {
        bitField0_ = (bitField0_ & ~0x00000002);
        remainingMonzaEncodes_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 remaining_non_monza_encodes = 3;
      private long remainingNonMonzaEncodes_ ;
      /**
       */
      public boolean hasRemainingNonMonzaEncodes() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public long getRemainingNonMonzaEncodes() {
        return remainingNonMonzaEncodes_;
      }
      /**
       */
      public Builder setRemainingNonMonzaEncodes(long value) {
        bitField0_ |= 0x00000004;
        remainingNonMonzaEncodes_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearRemainingNonMonzaEncodes() {
        bitField0_ = (bitField0_ & ~0x00000004);
        remainingNonMonzaEncodes_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.LowEncodeVolumeEvent)
    }

    static {
      defaultInstance = new LowEncodeVolumeEvent(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.LowEncodeVolumeEvent)
  }

  public interface DeviceEventReportOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.OperationEvent operation_event = 1;
    /**
     */
    boolean hasOperationEvent();
    /**
     */
    com.impinj.stp.StpApi.OperationEvent getOperationEvent();
    /**
     */
    com.impinj.stp.StpApi.OperationEventOrBuilder getOperationEventOrBuilder();

    // optional .Impinj.STP.GPIEvent GPI_event = 3;
    /**
     *
     * optional    SerializationJobEvent
     * serialization_job_event             = 2;
     */
    boolean hasGPIEvent();
    /**
     *
     * optional    SerializationJobEvent
     * serialization_job_event             = 2;
     */
    com.impinj.stp.StpApi.GPIEvent getGPIEvent();
    /**
     *
     * optional    SerializationJobEvent
     * serialization_job_event             = 2;
     */
    com.impinj.stp.StpApi.GPIEventOrBuilder getGPIEventOrBuilder();

    // optional .Impinj.STP.DeviceExceptionEvent device_exception_event = 5;
    /**
     *
     * optional    AntennaEvent                antenna_event
     * = 4;
     */
    boolean hasDeviceExceptionEvent();
    /**
     *
     * optional    AntennaEvent                antenna_event
     * = 4;
     */
    com.impinj.stp.StpApi.DeviceExceptionEvent getDeviceExceptionEvent();
    /**
     *
     * optional    AntennaEvent                antenna_event
     * = 4;
     */
    com.impinj.stp.StpApi.DeviceExceptionEventOrBuilder getDeviceExceptionEventOrBuilder();

    // optional .Impinj.STP.LowEncodeVolumeEvent low_encode_volume_event = 6;
    /**
     */
    boolean hasLowEncodeVolumeEvent();
    /**
     */
    com.impinj.stp.StpApi.LowEncodeVolumeEvent getLowEncodeVolumeEvent();
    /**
     */
    com.impinj.stp.StpApi.LowEncodeVolumeEventOrBuilder getLowEncodeVolumeEventOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.DeviceEventReport}
   */
  public static final class DeviceEventReport extends
      com.google.protobuf.GeneratedMessage
      implements DeviceEventReportOrBuilder {
    // Use DeviceEventReport.newBuilder() to construct.
    private DeviceEventReport(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeviceEventReport(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DeviceEventReport defaultInstance;
    public static DeviceEventReport getDefaultInstance() {
      return defaultInstance;
    }

    public DeviceEventReport getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceEventReport(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.OperationEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = operationEvent_.toBuilder();
              }
              operationEvent_ = input.readMessage(com.impinj.stp.StpApi.OperationEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(operationEvent_);
                operationEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.GPIEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = gPIEvent_.toBuilder();
              }
              gPIEvent_ = input.readMessage(com.impinj.stp.StpApi.GPIEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gPIEvent_);
                gPIEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.DeviceExceptionEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = deviceExceptionEvent_.toBuilder();
              }
              deviceExceptionEvent_ = input.readMessage(com.impinj.stp.StpApi.DeviceExceptionEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceExceptionEvent_);
                deviceExceptionEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = lowEncodeVolumeEvent_.toBuilder();
              }
              lowEncodeVolumeEvent_ = input.readMessage(com.impinj.stp.StpApi.LowEncodeVolumeEvent.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(lowEncodeVolumeEvent_);
                lowEncodeVolumeEvent_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventReport_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventReport_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.DeviceEventReport.class, com.impinj.stp.StpApi.DeviceEventReport.Builder.class);
    }

    public static com.google.protobuf.Parser<DeviceEventReport> PARSER =
        new com.google.protobuf.AbstractParser<DeviceEventReport>() {
      public DeviceEventReport parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeviceEventReport(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DeviceEventReport> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.OperationEvent operation_event = 1;
    public static final int OPERATION_EVENT_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.OperationEvent operationEvent_;
    /**
     */
    public boolean hasOperationEvent() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationEvent getOperationEvent() {
      return operationEvent_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationEventOrBuilder getOperationEventOrBuilder() {
      return operationEvent_;
    }

    // optional .Impinj.STP.GPIEvent GPI_event = 3;
    public static final int GPI_EVENT_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.GPIEvent gPIEvent_;
    /**
     *
     * optional    SerializationJobEvent
     * serialization_job_event             = 2;
     */
    public boolean hasGPIEvent() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * optional    SerializationJobEvent
     * serialization_job_event             = 2;
     */
    public com.impinj.stp.StpApi.GPIEvent getGPIEvent() {
      return gPIEvent_;
    }
    /**
     *
     * optional    SerializationJobEvent
     * serialization_job_event             = 2;
     */
    public com.impinj.stp.StpApi.GPIEventOrBuilder getGPIEventOrBuilder() {
      return gPIEvent_;
    }

    // optional .Impinj.STP.DeviceExceptionEvent device_exception_event = 5;
    public static final int DEVICE_EXCEPTION_EVENT_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.DeviceExceptionEvent deviceExceptionEvent_;
    /**
     *
     * optional    AntennaEvent                antenna_event
     * = 4;
     */
    public boolean hasDeviceExceptionEvent() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * optional    AntennaEvent                antenna_event
     * = 4;
     */
    public com.impinj.stp.StpApi.DeviceExceptionEvent getDeviceExceptionEvent() {
      return deviceExceptionEvent_;
    }
    /**
     *
     * optional    AntennaEvent                antenna_event
     * = 4;
     */
    public com.impinj.stp.StpApi.DeviceExceptionEventOrBuilder getDeviceExceptionEventOrBuilder() {
      return deviceExceptionEvent_;
    }

    // optional .Impinj.STP.LowEncodeVolumeEvent low_encode_volume_event = 6;
    public static final int LOW_ENCODE_VOLUME_EVENT_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.LowEncodeVolumeEvent lowEncodeVolumeEvent_;
    /**
     */
    public boolean hasLowEncodeVolumeEvent() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.LowEncodeVolumeEvent getLowEncodeVolumeEvent() {
      return lowEncodeVolumeEvent_;
    }
    /**
     */
    public com.impinj.stp.StpApi.LowEncodeVolumeEventOrBuilder getLowEncodeVolumeEventOrBuilder() {
      return lowEncodeVolumeEvent_;
    }

    private void initFields() {
      operationEvent_ = com.impinj.stp.StpApi.OperationEvent.getDefaultInstance();
      gPIEvent_ = com.impinj.stp.StpApi.GPIEvent.getDefaultInstance();
      deviceExceptionEvent_ = com.impinj.stp.StpApi.DeviceExceptionEvent.getDefaultInstance();
      lowEncodeVolumeEvent_ = com.impinj.stp.StpApi.LowEncodeVolumeEvent.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasOperationEvent()) {
        if (!getOperationEvent().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasGPIEvent()) {
        if (!getGPIEvent().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasDeviceExceptionEvent()) {
        if (!getDeviceExceptionEvent().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, operationEvent_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(3, gPIEvent_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(5, deviceExceptionEvent_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(6, lowEncodeVolumeEvent_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, operationEvent_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, gPIEvent_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, deviceExceptionEvent_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, lowEncodeVolumeEvent_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DeviceEventReport parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.DeviceEventReport prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.DeviceEventReport}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.DeviceEventReportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventReport_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventReport_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.DeviceEventReport.class, com.impinj.stp.StpApi.DeviceEventReport.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.DeviceEventReport.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOperationEventFieldBuilder();
          getGPIEventFieldBuilder();
          getDeviceExceptionEventFieldBuilder();
          getLowEncodeVolumeEventFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (operationEventBuilder_ == null) {
          operationEvent_ = com.impinj.stp.StpApi.OperationEvent.getDefaultInstance();
        } else {
          operationEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (gPIEventBuilder_ == null) {
          gPIEvent_ = com.impinj.stp.StpApi.GPIEvent.getDefaultInstance();
        } else {
          gPIEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (deviceExceptionEventBuilder_ == null) {
          deviceExceptionEvent_ = com.impinj.stp.StpApi.DeviceExceptionEvent.getDefaultInstance();
        } else {
          deviceExceptionEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (lowEncodeVolumeEventBuilder_ == null) {
          lowEncodeVolumeEvent_ = com.impinj.stp.StpApi.LowEncodeVolumeEvent.getDefaultInstance();
        } else {
          lowEncodeVolumeEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DeviceEventReport_descriptor;
      }

      public com.impinj.stp.StpApi.DeviceEventReport getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.DeviceEventReport.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.DeviceEventReport build() {
        com.impinj.stp.StpApi.DeviceEventReport result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.DeviceEventReport buildPartial() {
        com.impinj.stp.StpApi.DeviceEventReport result = new com.impinj.stp.StpApi.DeviceEventReport(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (operationEventBuilder_ == null) {
          result.operationEvent_ = operationEvent_;
        } else {
          result.operationEvent_ = operationEventBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (gPIEventBuilder_ == null) {
          result.gPIEvent_ = gPIEvent_;
        } else {
          result.gPIEvent_ = gPIEventBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (deviceExceptionEventBuilder_ == null) {
          result.deviceExceptionEvent_ = deviceExceptionEvent_;
        } else {
          result.deviceExceptionEvent_ = deviceExceptionEventBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (lowEncodeVolumeEventBuilder_ == null) {
          result.lowEncodeVolumeEvent_ = lowEncodeVolumeEvent_;
        } else {
          result.lowEncodeVolumeEvent_ = lowEncodeVolumeEventBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.DeviceEventReport) {
          return mergeFrom((com.impinj.stp.StpApi.DeviceEventReport)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.DeviceEventReport other) {
        if (other == com.impinj.stp.StpApi.DeviceEventReport.getDefaultInstance()) return this;
        if (other.hasOperationEvent()) {
          mergeOperationEvent(other.getOperationEvent());
        }
        if (other.hasGPIEvent()) {
          mergeGPIEvent(other.getGPIEvent());
        }
        if (other.hasDeviceExceptionEvent()) {
          mergeDeviceExceptionEvent(other.getDeviceExceptionEvent());
        }
        if (other.hasLowEncodeVolumeEvent()) {
          mergeLowEncodeVolumeEvent(other.getLowEncodeVolumeEvent());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasOperationEvent()) {
          if (!getOperationEvent().isInitialized()) {
            
            return false;
          }
        }
        if (hasGPIEvent()) {
          if (!getGPIEvent().isInitialized()) {
            
            return false;
          }
        }
        if (hasDeviceExceptionEvent()) {
          if (!getDeviceExceptionEvent().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.DeviceEventReport parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.DeviceEventReport) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.OperationEvent operation_event = 1;
      private com.impinj.stp.StpApi.OperationEvent operationEvent_ = com.impinj.stp.StpApi.OperationEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationEvent, com.impinj.stp.StpApi.OperationEvent.Builder, com.impinj.stp.StpApi.OperationEventOrBuilder> operationEventBuilder_;
      /**
       */
      public boolean hasOperationEvent() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationEvent getOperationEvent() {
        if (operationEventBuilder_ == null) {
          return operationEvent_;
        } else {
          return operationEventBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOperationEvent(com.impinj.stp.StpApi.OperationEvent value) {
        if (operationEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          operationEvent_ = value;
          onChanged();
        } else {
          operationEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setOperationEvent(
          com.impinj.stp.StpApi.OperationEvent.Builder builderForValue) {
        if (operationEventBuilder_ == null) {
          operationEvent_ = builderForValue.build();
          onChanged();
        } else {
          operationEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeOperationEvent(com.impinj.stp.StpApi.OperationEvent value) {
        if (operationEventBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              operationEvent_ != com.impinj.stp.StpApi.OperationEvent.getDefaultInstance()) {
            operationEvent_ =
              com.impinj.stp.StpApi.OperationEvent.newBuilder(operationEvent_).mergeFrom(value).buildPartial();
          } else {
            operationEvent_ = value;
          }
          onChanged();
        } else {
          operationEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearOperationEvent() {
        if (operationEventBuilder_ == null) {
          operationEvent_ = com.impinj.stp.StpApi.OperationEvent.getDefaultInstance();
          onChanged();
        } else {
          operationEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationEvent.Builder getOperationEventBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getOperationEventFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationEventOrBuilder getOperationEventOrBuilder() {
        if (operationEventBuilder_ != null) {
          return operationEventBuilder_.getMessageOrBuilder();
        } else {
          return operationEvent_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationEvent, com.impinj.stp.StpApi.OperationEvent.Builder, com.impinj.stp.StpApi.OperationEventOrBuilder> 
          getOperationEventFieldBuilder() {
        if (operationEventBuilder_ == null) {
          operationEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OperationEvent, com.impinj.stp.StpApi.OperationEvent.Builder, com.impinj.stp.StpApi.OperationEventOrBuilder>(
                  operationEvent_,
                  getParentForChildren(),
                  isClean());
          operationEvent_ = null;
        }
        return operationEventBuilder_;
      }

      // optional .Impinj.STP.GPIEvent GPI_event = 3;
      private com.impinj.stp.StpApi.GPIEvent gPIEvent_ = com.impinj.stp.StpApi.GPIEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GPIEvent, com.impinj.stp.StpApi.GPIEvent.Builder, com.impinj.stp.StpApi.GPIEventOrBuilder> gPIEventBuilder_;
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public boolean hasGPIEvent() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public com.impinj.stp.StpApi.GPIEvent getGPIEvent() {
        if (gPIEventBuilder_ == null) {
          return gPIEvent_;
        } else {
          return gPIEventBuilder_.getMessage();
        }
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public Builder setGPIEvent(com.impinj.stp.StpApi.GPIEvent value) {
        if (gPIEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gPIEvent_ = value;
          onChanged();
        } else {
          gPIEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public Builder setGPIEvent(
          com.impinj.stp.StpApi.GPIEvent.Builder builderForValue) {
        if (gPIEventBuilder_ == null) {
          gPIEvent_ = builderForValue.build();
          onChanged();
        } else {
          gPIEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public Builder mergeGPIEvent(com.impinj.stp.StpApi.GPIEvent value) {
        if (gPIEventBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              gPIEvent_ != com.impinj.stp.StpApi.GPIEvent.getDefaultInstance()) {
            gPIEvent_ =
              com.impinj.stp.StpApi.GPIEvent.newBuilder(gPIEvent_).mergeFrom(value).buildPartial();
          } else {
            gPIEvent_ = value;
          }
          onChanged();
        } else {
          gPIEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public Builder clearGPIEvent() {
        if (gPIEventBuilder_ == null) {
          gPIEvent_ = com.impinj.stp.StpApi.GPIEvent.getDefaultInstance();
          onChanged();
        } else {
          gPIEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public com.impinj.stp.StpApi.GPIEvent.Builder getGPIEventBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getGPIEventFieldBuilder().getBuilder();
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      public com.impinj.stp.StpApi.GPIEventOrBuilder getGPIEventOrBuilder() {
        if (gPIEventBuilder_ != null) {
          return gPIEventBuilder_.getMessageOrBuilder();
        } else {
          return gPIEvent_;
        }
      }
      /**
       *
       * optional    SerializationJobEvent
       * serialization_job_event             = 2;
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GPIEvent, com.impinj.stp.StpApi.GPIEvent.Builder, com.impinj.stp.StpApi.GPIEventOrBuilder> 
          getGPIEventFieldBuilder() {
        if (gPIEventBuilder_ == null) {
          gPIEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GPIEvent, com.impinj.stp.StpApi.GPIEvent.Builder, com.impinj.stp.StpApi.GPIEventOrBuilder>(
                  gPIEvent_,
                  getParentForChildren(),
                  isClean());
          gPIEvent_ = null;
        }
        return gPIEventBuilder_;
      }

      // optional .Impinj.STP.DeviceExceptionEvent device_exception_event = 5;
      private com.impinj.stp.StpApi.DeviceExceptionEvent deviceExceptionEvent_ = com.impinj.stp.StpApi.DeviceExceptionEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceExceptionEvent, com.impinj.stp.StpApi.DeviceExceptionEvent.Builder, com.impinj.stp.StpApi.DeviceExceptionEventOrBuilder> deviceExceptionEventBuilder_;
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public boolean hasDeviceExceptionEvent() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public com.impinj.stp.StpApi.DeviceExceptionEvent getDeviceExceptionEvent() {
        if (deviceExceptionEventBuilder_ == null) {
          return deviceExceptionEvent_;
        } else {
          return deviceExceptionEventBuilder_.getMessage();
        }
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public Builder setDeviceExceptionEvent(com.impinj.stp.StpApi.DeviceExceptionEvent value) {
        if (deviceExceptionEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceExceptionEvent_ = value;
          onChanged();
        } else {
          deviceExceptionEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public Builder setDeviceExceptionEvent(
          com.impinj.stp.StpApi.DeviceExceptionEvent.Builder builderForValue) {
        if (deviceExceptionEventBuilder_ == null) {
          deviceExceptionEvent_ = builderForValue.build();
          onChanged();
        } else {
          deviceExceptionEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public Builder mergeDeviceExceptionEvent(com.impinj.stp.StpApi.DeviceExceptionEvent value) {
        if (deviceExceptionEventBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              deviceExceptionEvent_ != com.impinj.stp.StpApi.DeviceExceptionEvent.getDefaultInstance()) {
            deviceExceptionEvent_ =
              com.impinj.stp.StpApi.DeviceExceptionEvent.newBuilder(deviceExceptionEvent_).mergeFrom(value).buildPartial();
          } else {
            deviceExceptionEvent_ = value;
          }
          onChanged();
        } else {
          deviceExceptionEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public Builder clearDeviceExceptionEvent() {
        if (deviceExceptionEventBuilder_ == null) {
          deviceExceptionEvent_ = com.impinj.stp.StpApi.DeviceExceptionEvent.getDefaultInstance();
          onChanged();
        } else {
          deviceExceptionEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public com.impinj.stp.StpApi.DeviceExceptionEvent.Builder getDeviceExceptionEventBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getDeviceExceptionEventFieldBuilder().getBuilder();
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      public com.impinj.stp.StpApi.DeviceExceptionEventOrBuilder getDeviceExceptionEventOrBuilder() {
        if (deviceExceptionEventBuilder_ != null) {
          return deviceExceptionEventBuilder_.getMessageOrBuilder();
        } else {
          return deviceExceptionEvent_;
        }
      }
      /**
       *
       * optional    AntennaEvent                antenna_event
       * = 4;
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceExceptionEvent, com.impinj.stp.StpApi.DeviceExceptionEvent.Builder, com.impinj.stp.StpApi.DeviceExceptionEventOrBuilder> 
          getDeviceExceptionEventFieldBuilder() {
        if (deviceExceptionEventBuilder_ == null) {
          deviceExceptionEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DeviceExceptionEvent, com.impinj.stp.StpApi.DeviceExceptionEvent.Builder, com.impinj.stp.StpApi.DeviceExceptionEventOrBuilder>(
                  deviceExceptionEvent_,
                  getParentForChildren(),
                  isClean());
          deviceExceptionEvent_ = null;
        }
        return deviceExceptionEventBuilder_;
      }

      // optional .Impinj.STP.LowEncodeVolumeEvent low_encode_volume_event = 6;
      private com.impinj.stp.StpApi.LowEncodeVolumeEvent lowEncodeVolumeEvent_ = com.impinj.stp.StpApi.LowEncodeVolumeEvent.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LowEncodeVolumeEvent, com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder, com.impinj.stp.StpApi.LowEncodeVolumeEventOrBuilder> lowEncodeVolumeEventBuilder_;
      /**
       */
      public boolean hasLowEncodeVolumeEvent() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.LowEncodeVolumeEvent getLowEncodeVolumeEvent() {
        if (lowEncodeVolumeEventBuilder_ == null) {
          return lowEncodeVolumeEvent_;
        } else {
          return lowEncodeVolumeEventBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setLowEncodeVolumeEvent(com.impinj.stp.StpApi.LowEncodeVolumeEvent value) {
        if (lowEncodeVolumeEventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          lowEncodeVolumeEvent_ = value;
          onChanged();
        } else {
          lowEncodeVolumeEventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setLowEncodeVolumeEvent(
          com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder builderForValue) {
        if (lowEncodeVolumeEventBuilder_ == null) {
          lowEncodeVolumeEvent_ = builderForValue.build();
          onChanged();
        } else {
          lowEncodeVolumeEventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeLowEncodeVolumeEvent(com.impinj.stp.StpApi.LowEncodeVolumeEvent value) {
        if (lowEncodeVolumeEventBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              lowEncodeVolumeEvent_ != com.impinj.stp.StpApi.LowEncodeVolumeEvent.getDefaultInstance()) {
            lowEncodeVolumeEvent_ =
              com.impinj.stp.StpApi.LowEncodeVolumeEvent.newBuilder(lowEncodeVolumeEvent_).mergeFrom(value).buildPartial();
          } else {
            lowEncodeVolumeEvent_ = value;
          }
          onChanged();
        } else {
          lowEncodeVolumeEventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearLowEncodeVolumeEvent() {
        if (lowEncodeVolumeEventBuilder_ == null) {
          lowEncodeVolumeEvent_ = com.impinj.stp.StpApi.LowEncodeVolumeEvent.getDefaultInstance();
          onChanged();
        } else {
          lowEncodeVolumeEventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder getLowEncodeVolumeEventBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getLowEncodeVolumeEventFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.LowEncodeVolumeEventOrBuilder getLowEncodeVolumeEventOrBuilder() {
        if (lowEncodeVolumeEventBuilder_ != null) {
          return lowEncodeVolumeEventBuilder_.getMessageOrBuilder();
        } else {
          return lowEncodeVolumeEvent_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LowEncodeVolumeEvent, com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder, com.impinj.stp.StpApi.LowEncodeVolumeEventOrBuilder> 
          getLowEncodeVolumeEventFieldBuilder() {
        if (lowEncodeVolumeEventBuilder_ == null) {
          lowEncodeVolumeEventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.LowEncodeVolumeEvent, com.impinj.stp.StpApi.LowEncodeVolumeEvent.Builder, com.impinj.stp.StpApi.LowEncodeVolumeEventOrBuilder>(
                  lowEncodeVolumeEvent_,
                  getParentForChildren(),
                  isClean());
          lowEncodeVolumeEvent_ = null;
        }
        return lowEncodeVolumeEventBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.DeviceEventReport)
    }

    static {
      defaultInstance = new DeviceEventReport(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.DeviceEventReport)
  }

  public interface GetAntennaConfigCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetAntennaConfigCommand}
   *
   * Request the antenna configuration.
   */
  public static final class GetAntennaConfigCommand extends
      com.google.protobuf.GeneratedMessage
      implements GetAntennaConfigCommandOrBuilder {
    // Use GetAntennaConfigCommand.newBuilder() to construct.
    private GetAntennaConfigCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetAntennaConfigCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetAntennaConfigCommand defaultInstance;
    public static GetAntennaConfigCommand getDefaultInstance() {
      return defaultInstance;
    }

    public GetAntennaConfigCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetAntennaConfigCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetAntennaConfigCommand.class, com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<GetAntennaConfigCommand> PARSER =
        new com.google.protobuf.AbstractParser<GetAntennaConfigCommand>() {
      public GetAntennaConfigCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetAntennaConfigCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetAntennaConfigCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetAntennaConfigCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetAntennaConfigCommand}
     *
     * Request the antenna configuration.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetAntennaConfigCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetAntennaConfigCommand.class, com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetAntennaConfigCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigCommand_descriptor;
      }

      public com.impinj.stp.StpApi.GetAntennaConfigCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetAntennaConfigCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetAntennaConfigCommand build() {
        com.impinj.stp.StpApi.GetAntennaConfigCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetAntennaConfigCommand buildPartial() {
        com.impinj.stp.StpApi.GetAntennaConfigCommand result = new com.impinj.stp.StpApi.GetAntennaConfigCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetAntennaConfigCommand) {
          return mergeFrom((com.impinj.stp.StpApi.GetAntennaConfigCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetAntennaConfigCommand other) {
        if (other == com.impinj.stp.StpApi.GetAntennaConfigCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetAntennaConfigCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetAntennaConfigCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetAntennaConfigCommand)
    }

    static {
      defaultInstance = new GetAntennaConfigCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetAntennaConfigCommand)
  }

  public interface SetAntennaConfigCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.AntennasConfig antennas_config = 1;
    /**
     */
    boolean hasAntennasConfig();
    /**
     */
    com.impinj.stp.StpApi.AntennasConfig getAntennasConfig();
    /**
     */
    com.impinj.stp.StpApi.AntennasConfigOrBuilder getAntennasConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetAntennaConfigCommand}
   *
   * Set the configuration for one or more antennas.
   */
  public static final class SetAntennaConfigCommand extends
      com.google.protobuf.GeneratedMessage
      implements SetAntennaConfigCommandOrBuilder {
    // Use SetAntennaConfigCommand.newBuilder() to construct.
    private SetAntennaConfigCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetAntennaConfigCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetAntennaConfigCommand defaultInstance;
    public static SetAntennaConfigCommand getDefaultInstance() {
      return defaultInstance;
    }

    public SetAntennaConfigCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetAntennaConfigCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.AntennasConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = antennasConfig_.toBuilder();
              }
              antennasConfig_ = input.readMessage(com.impinj.stp.StpApi.AntennasConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(antennasConfig_);
                antennasConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetAntennaConfigCommand.class, com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<SetAntennaConfigCommand> PARSER =
        new com.google.protobuf.AbstractParser<SetAntennaConfigCommand>() {
      public SetAntennaConfigCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetAntennaConfigCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetAntennaConfigCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.AntennasConfig antennas_config = 1;
    public static final int ANTENNAS_CONFIG_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.AntennasConfig antennasConfig_;
    /**
     */
    public boolean hasAntennasConfig() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.AntennasConfig getAntennasConfig() {
      return antennasConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AntennasConfigOrBuilder getAntennasConfigOrBuilder() {
      return antennasConfig_;
    }

    private void initFields() {
      antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasAntennasConfig()) {
        if (!getAntennasConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, antennasConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, antennasConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetAntennaConfigCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetAntennaConfigCommand}
     *
     * Set the configuration for one or more antennas.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetAntennaConfigCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetAntennaConfigCommand.class, com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetAntennaConfigCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAntennasConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (antennasConfigBuilder_ == null) {
          antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
        } else {
          antennasConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigCommand_descriptor;
      }

      public com.impinj.stp.StpApi.SetAntennaConfigCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetAntennaConfigCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetAntennaConfigCommand build() {
        com.impinj.stp.StpApi.SetAntennaConfigCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetAntennaConfigCommand buildPartial() {
        com.impinj.stp.StpApi.SetAntennaConfigCommand result = new com.impinj.stp.StpApi.SetAntennaConfigCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (antennasConfigBuilder_ == null) {
          result.antennasConfig_ = antennasConfig_;
        } else {
          result.antennasConfig_ = antennasConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetAntennaConfigCommand) {
          return mergeFrom((com.impinj.stp.StpApi.SetAntennaConfigCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetAntennaConfigCommand other) {
        if (other == com.impinj.stp.StpApi.SetAntennaConfigCommand.getDefaultInstance()) return this;
        if (other.hasAntennasConfig()) {
          mergeAntennasConfig(other.getAntennasConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasAntennasConfig()) {
          if (!getAntennasConfig().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetAntennaConfigCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetAntennaConfigCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.AntennasConfig antennas_config = 1;
      private com.impinj.stp.StpApi.AntennasConfig antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AntennasConfig, com.impinj.stp.StpApi.AntennasConfig.Builder, com.impinj.stp.StpApi.AntennasConfigOrBuilder> antennasConfigBuilder_;
      /**
       */
      public boolean hasAntennasConfig() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.AntennasConfig getAntennasConfig() {
        if (antennasConfigBuilder_ == null) {
          return antennasConfig_;
        } else {
          return antennasConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAntennasConfig(com.impinj.stp.StpApi.AntennasConfig value) {
        if (antennasConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          antennasConfig_ = value;
          onChanged();
        } else {
          antennasConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setAntennasConfig(
          com.impinj.stp.StpApi.AntennasConfig.Builder builderForValue) {
        if (antennasConfigBuilder_ == null) {
          antennasConfig_ = builderForValue.build();
          onChanged();
        } else {
          antennasConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeAntennasConfig(com.impinj.stp.StpApi.AntennasConfig value) {
        if (antennasConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              antennasConfig_ != com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance()) {
            antennasConfig_ =
              com.impinj.stp.StpApi.AntennasConfig.newBuilder(antennasConfig_).mergeFrom(value).buildPartial();
          } else {
            antennasConfig_ = value;
          }
          onChanged();
        } else {
          antennasConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearAntennasConfig() {
        if (antennasConfigBuilder_ == null) {
          antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
          onChanged();
        } else {
          antennasConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AntennasConfig.Builder getAntennasConfigBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getAntennasConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AntennasConfigOrBuilder getAntennasConfigOrBuilder() {
        if (antennasConfigBuilder_ != null) {
          return antennasConfigBuilder_.getMessageOrBuilder();
        } else {
          return antennasConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AntennasConfig, com.impinj.stp.StpApi.AntennasConfig.Builder, com.impinj.stp.StpApi.AntennasConfigOrBuilder> 
          getAntennasConfigFieldBuilder() {
        if (antennasConfigBuilder_ == null) {
          antennasConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AntennasConfig, com.impinj.stp.StpApi.AntennasConfig.Builder, com.impinj.stp.StpApi.AntennasConfigOrBuilder>(
                  antennasConfig_,
                  getParentForChildren(),
                  isClean());
          antennasConfig_ = null;
        }
        return antennasConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetAntennaConfigCommand)
    }

    static {
      defaultInstance = new SetAntennaConfigCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetAntennaConfigCommand)
  }

  public interface StartCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.StartCommand}
   *
   * Start the encode or inventory operation.
   */
  public static final class StartCommand extends
      com.google.protobuf.GeneratedMessage
      implements StartCommandOrBuilder {
    // Use StartCommand.newBuilder() to construct.
    private StartCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StartCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StartCommand defaultInstance;
    public static StartCommand getDefaultInstance() {
      return defaultInstance;
    }

    public StartCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StartCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.StartCommand.class, com.impinj.stp.StpApi.StartCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<StartCommand> PARSER =
        new com.google.protobuf.AbstractParser<StartCommand>() {
      public StartCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StartCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StartCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.StartCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StartCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StartCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StartCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.StartCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StartCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.StartCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.StartCommand}
     *
     * Start the encode or inventory operation.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.StartCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.StartCommand.class, com.impinj.stp.StpApi.StartCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.StartCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartCommand_descriptor;
      }

      public com.impinj.stp.StpApi.StartCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.StartCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.StartCommand build() {
        com.impinj.stp.StpApi.StartCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.StartCommand buildPartial() {
        com.impinj.stp.StpApi.StartCommand result = new com.impinj.stp.StpApi.StartCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.StartCommand) {
          return mergeFrom((com.impinj.stp.StpApi.StartCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.StartCommand other) {
        if (other == com.impinj.stp.StpApi.StartCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.StartCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.StartCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.StartCommand)
    }

    static {
      defaultInstance = new StartCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.StartCommand)
  }

  public interface SetDeviceConfigCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // required .Impinj.STP.DeviceConfig device_config = 1;
    /**
     */
    boolean hasDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.DeviceConfig getDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetDeviceConfigCommand}
   *
   * Set the device's behavior.
   */
  public static final class SetDeviceConfigCommand extends
      com.google.protobuf.GeneratedMessage
      implements SetDeviceConfigCommandOrBuilder {
    // Use SetDeviceConfigCommand.newBuilder() to construct.
    private SetDeviceConfigCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetDeviceConfigCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetDeviceConfigCommand defaultInstance;
    public static SetDeviceConfigCommand getDefaultInstance() {
      return defaultInstance;
    }

    public SetDeviceConfigCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetDeviceConfigCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.DeviceConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = deviceConfig_.toBuilder();
              }
              deviceConfig_ = input.readMessage(com.impinj.stp.StpApi.DeviceConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceConfig_);
                deviceConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetDeviceConfigCommand.class, com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<SetDeviceConfigCommand> PARSER =
        new com.google.protobuf.AbstractParser<SetDeviceConfigCommand>() {
      public SetDeviceConfigCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetDeviceConfigCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetDeviceConfigCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // required .Impinj.STP.DeviceConfig device_config = 1;
    public static final int DEVICE_CONFIG_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.DeviceConfig deviceConfig_;
    /**
     */
    public boolean hasDeviceConfig() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceConfig getDeviceConfig() {
      return deviceConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
      return deviceConfig_;
    }

    private void initFields() {
      deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (!hasDeviceConfig()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getDeviceConfig().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, deviceConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, deviceConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetDeviceConfigCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetDeviceConfigCommand}
     *
     * Set the device's behavior.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetDeviceConfigCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetDeviceConfigCommand.class, com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetDeviceConfigCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDeviceConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (deviceConfigBuilder_ == null) {
          deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
        } else {
          deviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigCommand_descriptor;
      }

      public com.impinj.stp.StpApi.SetDeviceConfigCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetDeviceConfigCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetDeviceConfigCommand build() {
        com.impinj.stp.StpApi.SetDeviceConfigCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetDeviceConfigCommand buildPartial() {
        com.impinj.stp.StpApi.SetDeviceConfigCommand result = new com.impinj.stp.StpApi.SetDeviceConfigCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (deviceConfigBuilder_ == null) {
          result.deviceConfig_ = deviceConfig_;
        } else {
          result.deviceConfig_ = deviceConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetDeviceConfigCommand) {
          return mergeFrom((com.impinj.stp.StpApi.SetDeviceConfigCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetDeviceConfigCommand other) {
        if (other == com.impinj.stp.StpApi.SetDeviceConfigCommand.getDefaultInstance()) return this;
        if (other.hasDeviceConfig()) {
          mergeDeviceConfig(other.getDeviceConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (!hasDeviceConfig()) {
          
          return false;
        }
        if (!getDeviceConfig().isInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetDeviceConfigCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetDeviceConfigCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // required .Impinj.STP.DeviceConfig device_config = 1;
      private com.impinj.stp.StpApi.DeviceConfig deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceConfig, com.impinj.stp.StpApi.DeviceConfig.Builder, com.impinj.stp.StpApi.DeviceConfigOrBuilder> deviceConfigBuilder_;
      /**
       */
      public boolean hasDeviceConfig() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceConfig getDeviceConfig() {
        if (deviceConfigBuilder_ == null) {
          return deviceConfig_;
        } else {
          return deviceConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setDeviceConfig(com.impinj.stp.StpApi.DeviceConfig value) {
        if (deviceConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceConfig_ = value;
          onChanged();
        } else {
          deviceConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setDeviceConfig(
          com.impinj.stp.StpApi.DeviceConfig.Builder builderForValue) {
        if (deviceConfigBuilder_ == null) {
          deviceConfig_ = builderForValue.build();
          onChanged();
        } else {
          deviceConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeDeviceConfig(com.impinj.stp.StpApi.DeviceConfig value) {
        if (deviceConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              deviceConfig_ != com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance()) {
            deviceConfig_ =
              com.impinj.stp.StpApi.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
          } else {
            deviceConfig_ = value;
          }
          onChanged();
        } else {
          deviceConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearDeviceConfig() {
        if (deviceConfigBuilder_ == null) {
          deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
          onChanged();
        } else {
          deviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceConfig.Builder getDeviceConfigBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDeviceConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
        if (deviceConfigBuilder_ != null) {
          return deviceConfigBuilder_.getMessageOrBuilder();
        } else {
          return deviceConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceConfig, com.impinj.stp.StpApi.DeviceConfig.Builder, com.impinj.stp.StpApi.DeviceConfigOrBuilder> 
          getDeviceConfigFieldBuilder() {
        if (deviceConfigBuilder_ == null) {
          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DeviceConfig, com.impinj.stp.StpApi.DeviceConfig.Builder, com.impinj.stp.StpApi.DeviceConfigOrBuilder>(
                  deviceConfig_,
                  getParentForChildren(),
                  isClean());
          deviceConfig_ = null;
        }
        return deviceConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetDeviceConfigCommand)
    }

    static {
      defaultInstance = new SetDeviceConfigCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetDeviceConfigCommand)
  }

  public interface GetDeviceConfigCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetDeviceConfigCommand}
   *
   * Get the DeviceConfig_
   */
  public static final class GetDeviceConfigCommand extends
      com.google.protobuf.GeneratedMessage
      implements GetDeviceConfigCommandOrBuilder {
    // Use GetDeviceConfigCommand.newBuilder() to construct.
    private GetDeviceConfigCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetDeviceConfigCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetDeviceConfigCommand defaultInstance;
    public static GetDeviceConfigCommand getDefaultInstance() {
      return defaultInstance;
    }

    public GetDeviceConfigCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetDeviceConfigCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetDeviceConfigCommand.class, com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<GetDeviceConfigCommand> PARSER =
        new com.google.protobuf.AbstractParser<GetDeviceConfigCommand>() {
      public GetDeviceConfigCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetDeviceConfigCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetDeviceConfigCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetDeviceConfigCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetDeviceConfigCommand}
     *
     * Get the DeviceConfig_
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetDeviceConfigCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetDeviceConfigCommand.class, com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetDeviceConfigCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigCommand_descriptor;
      }

      public com.impinj.stp.StpApi.GetDeviceConfigCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetDeviceConfigCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetDeviceConfigCommand build() {
        com.impinj.stp.StpApi.GetDeviceConfigCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetDeviceConfigCommand buildPartial() {
        com.impinj.stp.StpApi.GetDeviceConfigCommand result = new com.impinj.stp.StpApi.GetDeviceConfigCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetDeviceConfigCommand) {
          return mergeFrom((com.impinj.stp.StpApi.GetDeviceConfigCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetDeviceConfigCommand other) {
        if (other == com.impinj.stp.StpApi.GetDeviceConfigCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetDeviceConfigCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetDeviceConfigCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetDeviceConfigCommand)
    }

    static {
      defaultInstance = new GetDeviceConfigCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetDeviceConfigCommand)
  }

  public interface EngageCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.EngageCommand}
   *
   * Tell the device to do any preparation possible before a
   * StartCommand_ is sent so that the operation begins as soon
   * after the start as possible.
   */
  public static final class EngageCommand extends
      com.google.protobuf.GeneratedMessage
      implements EngageCommandOrBuilder {
    // Use EngageCommand.newBuilder() to construct.
    private EngageCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EngageCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EngageCommand defaultInstance;
    public static EngageCommand getDefaultInstance() {
      return defaultInstance;
    }

    public EngageCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EngageCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.EngageCommand.class, com.impinj.stp.StpApi.EngageCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<EngageCommand> PARSER =
        new com.google.protobuf.AbstractParser<EngageCommand>() {
      public EngageCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EngageCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EngageCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.EngageCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.EngageCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.EngageCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.EngageCommand}
     *
     * Tell the device to do any preparation possible before a
     * StartCommand_ is sent so that the operation begins as soon
     * after the start as possible.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.EngageCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.EngageCommand.class, com.impinj.stp.StpApi.EngageCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.EngageCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageCommand_descriptor;
      }

      public com.impinj.stp.StpApi.EngageCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.EngageCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.EngageCommand build() {
        com.impinj.stp.StpApi.EngageCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.EngageCommand buildPartial() {
        com.impinj.stp.StpApi.EngageCommand result = new com.impinj.stp.StpApi.EngageCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.EngageCommand) {
          return mergeFrom((com.impinj.stp.StpApi.EngageCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.EngageCommand other) {
        if (other == com.impinj.stp.StpApi.EngageCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.EngageCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.EngageCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.EngageCommand)
    }

    static {
      defaultInstance = new EngageCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.EngageCommand)
  }

  public interface DisengageCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.DisengageCommand}
   *
   * Called after StopCommand_, return the device to its initial
   * state.
   */
  public static final class DisengageCommand extends
      com.google.protobuf.GeneratedMessage
      implements DisengageCommandOrBuilder {
    // Use DisengageCommand.newBuilder() to construct.
    private DisengageCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DisengageCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DisengageCommand defaultInstance;
    public static DisengageCommand getDefaultInstance() {
      return defaultInstance;
    }

    public DisengageCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DisengageCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.DisengageCommand.class, com.impinj.stp.StpApi.DisengageCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<DisengageCommand> PARSER =
        new com.google.protobuf.AbstractParser<DisengageCommand>() {
      public DisengageCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DisengageCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DisengageCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DisengageCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.DisengageCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.DisengageCommand}
     *
     * Called after StopCommand_, return the device to its initial
     * state.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.DisengageCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.DisengageCommand.class, com.impinj.stp.StpApi.DisengageCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.DisengageCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageCommand_descriptor;
      }

      public com.impinj.stp.StpApi.DisengageCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.DisengageCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.DisengageCommand build() {
        com.impinj.stp.StpApi.DisengageCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.DisengageCommand buildPartial() {
        com.impinj.stp.StpApi.DisengageCommand result = new com.impinj.stp.StpApi.DisengageCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.DisengageCommand) {
          return mergeFrom((com.impinj.stp.StpApi.DisengageCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.DisengageCommand other) {
        if (other == com.impinj.stp.StpApi.DisengageCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.DisengageCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.DisengageCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.DisengageCommand)
    }

    static {
      defaultInstance = new DisengageCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.DisengageCommand)
  }

  public interface SetOperationResultGPOCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.OperationSummaryResult operation_summary_result = 1;
    /**
     */
    boolean hasOperationSummaryResult();
    /**
     */
    com.impinj.stp.StpApi.OperationSummaryResult getOperationSummaryResult();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetOperationResultGPOCommand}
   */
  public static final class SetOperationResultGPOCommand extends
      com.google.protobuf.GeneratedMessage
      implements SetOperationResultGPOCommandOrBuilder {
    // Use SetOperationResultGPOCommand.newBuilder() to construct.
    private SetOperationResultGPOCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetOperationResultGPOCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetOperationResultGPOCommand defaultInstance;
    public static SetOperationResultGPOCommand getDefaultInstance() {
      return defaultInstance;
    }

    public SetOperationResultGPOCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetOperationResultGPOCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.impinj.stp.StpApi.OperationSummaryResult value = com.impinj.stp.StpApi.OperationSummaryResult.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                operationSummaryResult_ = value;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetOperationResultGPOCommand.class, com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<SetOperationResultGPOCommand> PARSER =
        new com.google.protobuf.AbstractParser<SetOperationResultGPOCommand>() {
      public SetOperationResultGPOCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetOperationResultGPOCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetOperationResultGPOCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.OperationSummaryResult operation_summary_result = 1;
    public static final int OPERATION_SUMMARY_RESULT_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.OperationSummaryResult operationSummaryResult_;
    /**
     */
    public boolean hasOperationSummaryResult() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationSummaryResult getOperationSummaryResult() {
      return operationSummaryResult_;
    }

    private void initFields() {
      operationSummaryResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, operationSummaryResult_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, operationSummaryResult_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetOperationResultGPOCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetOperationResultGPOCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetOperationResultGPOCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetOperationResultGPOCommand.class, com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetOperationResultGPOCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        operationSummaryResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOCommand_descriptor;
      }

      public com.impinj.stp.StpApi.SetOperationResultGPOCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetOperationResultGPOCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetOperationResultGPOCommand build() {
        com.impinj.stp.StpApi.SetOperationResultGPOCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetOperationResultGPOCommand buildPartial() {
        com.impinj.stp.StpApi.SetOperationResultGPOCommand result = new com.impinj.stp.StpApi.SetOperationResultGPOCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.operationSummaryResult_ = operationSummaryResult_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetOperationResultGPOCommand) {
          return mergeFrom((com.impinj.stp.StpApi.SetOperationResultGPOCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetOperationResultGPOCommand other) {
        if (other == com.impinj.stp.StpApi.SetOperationResultGPOCommand.getDefaultInstance()) return this;
        if (other.hasOperationSummaryResult()) {
          setOperationSummaryResult(other.getOperationSummaryResult());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetOperationResultGPOCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetOperationResultGPOCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.OperationSummaryResult operation_summary_result = 1;
      private com.impinj.stp.StpApi.OperationSummaryResult operationSummaryResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
      /**
       */
      public boolean hasOperationSummaryResult() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryResult getOperationSummaryResult() {
        return operationSummaryResult_;
      }
      /**
       */
      public Builder setOperationSummaryResult(com.impinj.stp.StpApi.OperationSummaryResult value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        operationSummaryResult_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearOperationSummaryResult() {
        bitField0_ = (bitField0_ & ~0x00000001);
        operationSummaryResult_ = com.impinj.stp.StpApi.OperationSummaryResult.OPERATION_SUMMARY_RESULT_PASS;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetOperationResultGPOCommand)
    }

    static {
      defaultInstance = new SetOperationResultGPOCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetOperationResultGPOCommand)
  }

  public interface AddSerializationJobCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.SerializationJob serialization_job = 1;
    /**
     */
    boolean hasSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.SerializationJob getSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.SerializationJobOrBuilder getSerializationJobOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddSerializationJobCommand}
   *
   * Set the SerializationJob_
   */
  public static final class AddSerializationJobCommand extends
      com.google.protobuf.GeneratedMessage
      implements AddSerializationJobCommandOrBuilder {
    // Use AddSerializationJobCommand.newBuilder() to construct.
    private AddSerializationJobCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddSerializationJobCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddSerializationJobCommand defaultInstance;
    public static AddSerializationJobCommand getDefaultInstance() {
      return defaultInstance;
    }

    public AddSerializationJobCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddSerializationJobCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.SerializationJob.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = serializationJob_.toBuilder();
              }
              serializationJob_ = input.readMessage(com.impinj.stp.StpApi.SerializationJob.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(serializationJob_);
                serializationJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddSerializationJobCommand.class, com.impinj.stp.StpApi.AddSerializationJobCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<AddSerializationJobCommand> PARSER =
        new com.google.protobuf.AbstractParser<AddSerializationJobCommand>() {
      public AddSerializationJobCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddSerializationJobCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddSerializationJobCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.SerializationJob serialization_job = 1;
    public static final int SERIALIZATION_JOB_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.SerializationJob serializationJob_;
    /**
     */
    public boolean hasSerializationJob() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.SerializationJob getSerializationJob() {
      return serializationJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SerializationJobOrBuilder getSerializationJobOrBuilder() {
      return serializationJob_;
    }

    private void initFields() {
      serializationJob_ = com.impinj.stp.StpApi.SerializationJob.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasSerializationJob()) {
        if (!getSerializationJob().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, serializationJob_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, serializationJob_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddSerializationJobCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddSerializationJobCommand}
     *
     * Set the SerializationJob_
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddSerializationJobCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddSerializationJobCommand.class, com.impinj.stp.StpApi.AddSerializationJobCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddSerializationJobCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getSerializationJobFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (serializationJobBuilder_ == null) {
          serializationJob_ = com.impinj.stp.StpApi.SerializationJob.getDefaultInstance();
        } else {
          serializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobCommand_descriptor;
      }

      public com.impinj.stp.StpApi.AddSerializationJobCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddSerializationJobCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddSerializationJobCommand build() {
        com.impinj.stp.StpApi.AddSerializationJobCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddSerializationJobCommand buildPartial() {
        com.impinj.stp.StpApi.AddSerializationJobCommand result = new com.impinj.stp.StpApi.AddSerializationJobCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (serializationJobBuilder_ == null) {
          result.serializationJob_ = serializationJob_;
        } else {
          result.serializationJob_ = serializationJobBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddSerializationJobCommand) {
          return mergeFrom((com.impinj.stp.StpApi.AddSerializationJobCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddSerializationJobCommand other) {
        if (other == com.impinj.stp.StpApi.AddSerializationJobCommand.getDefaultInstance()) return this;
        if (other.hasSerializationJob()) {
          mergeSerializationJob(other.getSerializationJob());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasSerializationJob()) {
          if (!getSerializationJob().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddSerializationJobCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddSerializationJobCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.SerializationJob serialization_job = 1;
      private com.impinj.stp.StpApi.SerializationJob serializationJob_ = com.impinj.stp.StpApi.SerializationJob.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SerializationJob, com.impinj.stp.StpApi.SerializationJob.Builder, com.impinj.stp.StpApi.SerializationJobOrBuilder> serializationJobBuilder_;
      /**
       */
      public boolean hasSerializationJob() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJob getSerializationJob() {
        if (serializationJobBuilder_ == null) {
          return serializationJob_;
        } else {
          return serializationJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSerializationJob(com.impinj.stp.StpApi.SerializationJob value) {
        if (serializationJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          serializationJob_ = value;
          onChanged();
        } else {
          serializationJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setSerializationJob(
          com.impinj.stp.StpApi.SerializationJob.Builder builderForValue) {
        if (serializationJobBuilder_ == null) {
          serializationJob_ = builderForValue.build();
          onChanged();
        } else {
          serializationJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeSerializationJob(com.impinj.stp.StpApi.SerializationJob value) {
        if (serializationJobBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              serializationJob_ != com.impinj.stp.StpApi.SerializationJob.getDefaultInstance()) {
            serializationJob_ =
              com.impinj.stp.StpApi.SerializationJob.newBuilder(serializationJob_).mergeFrom(value).buildPartial();
          } else {
            serializationJob_ = value;
          }
          onChanged();
        } else {
          serializationJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearSerializationJob() {
        if (serializationJobBuilder_ == null) {
          serializationJob_ = com.impinj.stp.StpApi.SerializationJob.getDefaultInstance();
          onChanged();
        } else {
          serializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJob.Builder getSerializationJobBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getSerializationJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SerializationJobOrBuilder getSerializationJobOrBuilder() {
        if (serializationJobBuilder_ != null) {
          return serializationJobBuilder_.getMessageOrBuilder();
        } else {
          return serializationJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SerializationJob, com.impinj.stp.StpApi.SerializationJob.Builder, com.impinj.stp.StpApi.SerializationJobOrBuilder> 
          getSerializationJobFieldBuilder() {
        if (serializationJobBuilder_ == null) {
          serializationJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SerializationJob, com.impinj.stp.StpApi.SerializationJob.Builder, com.impinj.stp.StpApi.SerializationJobOrBuilder>(
                  serializationJob_,
                  getParentForChildren(),
                  isClean());
          serializationJob_ = null;
        }
        return serializationJobBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddSerializationJobCommand)
    }

    static {
      defaultInstance = new AddSerializationJobCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddSerializationJobCommand)
  }

  public interface RemoveSerializationJobCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional uint32 job_id = 1;
    /**
     */
    boolean hasJobId();
    /**
     */
    int getJobId();
  }
  /**
   * Protobuf type {@code Impinj.STP.RemoveSerializationJobCommand}
   *
   * **NOT YET SUPPORTED**
   */
  public static final class RemoveSerializationJobCommand extends
      com.google.protobuf.GeneratedMessage
      implements RemoveSerializationJobCommandOrBuilder {
    // Use RemoveSerializationJobCommand.newBuilder() to construct.
    private RemoveSerializationJobCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private RemoveSerializationJobCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final RemoveSerializationJobCommand defaultInstance;
    public static RemoveSerializationJobCommand getDefaultInstance() {
      return defaultInstance;
    }

    public RemoveSerializationJobCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private RemoveSerializationJobCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              jobId_ = input.readUInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.RemoveSerializationJobCommand.class, com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<RemoveSerializationJobCommand> PARSER =
        new com.google.protobuf.AbstractParser<RemoveSerializationJobCommand>() {
      public RemoveSerializationJobCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RemoveSerializationJobCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<RemoveSerializationJobCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional uint32 job_id = 1;
    public static final int JOB_ID_FIELD_NUMBER = 1;
    private int jobId_;
    /**
     */
    public boolean hasJobId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public int getJobId() {
      return jobId_;
    }

    private void initFields() {
      jobId_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, jobId_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, jobId_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.RemoveSerializationJobCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.RemoveSerializationJobCommand}
     *
     * **NOT YET SUPPORTED**
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.RemoveSerializationJobCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.RemoveSerializationJobCommand.class, com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.RemoveSerializationJobCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        jobId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobCommand_descriptor;
      }

      public com.impinj.stp.StpApi.RemoveSerializationJobCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.RemoveSerializationJobCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.RemoveSerializationJobCommand build() {
        com.impinj.stp.StpApi.RemoveSerializationJobCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.RemoveSerializationJobCommand buildPartial() {
        com.impinj.stp.StpApi.RemoveSerializationJobCommand result = new com.impinj.stp.StpApi.RemoveSerializationJobCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.jobId_ = jobId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.RemoveSerializationJobCommand) {
          return mergeFrom((com.impinj.stp.StpApi.RemoveSerializationJobCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.RemoveSerializationJobCommand other) {
        if (other == com.impinj.stp.StpApi.RemoveSerializationJobCommand.getDefaultInstance()) return this;
        if (other.hasJobId()) {
          setJobId(other.getJobId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.RemoveSerializationJobCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.RemoveSerializationJobCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional uint32 job_id = 1;
      private int jobId_ ;
      /**
       */
      public boolean hasJobId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public int getJobId() {
        return jobId_;
      }
      /**
       */
      public Builder setJobId(int value) {
        bitField0_ |= 0x00000001;
        jobId_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearJobId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        jobId_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.RemoveSerializationJobCommand)
    }

    static {
      defaultInstance = new RemoveSerializationJobCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.RemoveSerializationJobCommand)
  }

  public interface SetInventoryJobCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.InventoryJob inventory_job = 1;
    /**
     */
    boolean hasInventoryJob();
    /**
     */
    com.impinj.stp.StpApi.InventoryJob getInventoryJob();
    /**
     */
    com.impinj.stp.StpApi.InventoryJobOrBuilder getInventoryJobOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetInventoryJobCommand}
   */
  public static final class SetInventoryJobCommand extends
      com.google.protobuf.GeneratedMessage
      implements SetInventoryJobCommandOrBuilder {
    // Use SetInventoryJobCommand.newBuilder() to construct.
    private SetInventoryJobCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetInventoryJobCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetInventoryJobCommand defaultInstance;
    public static SetInventoryJobCommand getDefaultInstance() {
      return defaultInstance;
    }

    public SetInventoryJobCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetInventoryJobCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.InventoryJob.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = inventoryJob_.toBuilder();
              }
              inventoryJob_ = input.readMessage(com.impinj.stp.StpApi.InventoryJob.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(inventoryJob_);
                inventoryJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetInventoryJobCommand.class, com.impinj.stp.StpApi.SetInventoryJobCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<SetInventoryJobCommand> PARSER =
        new com.google.protobuf.AbstractParser<SetInventoryJobCommand>() {
      public SetInventoryJobCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetInventoryJobCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetInventoryJobCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.InventoryJob inventory_job = 1;
    public static final int INVENTORY_JOB_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.InventoryJob inventoryJob_;
    /**
     */
    public boolean hasInventoryJob() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.InventoryJob getInventoryJob() {
      return inventoryJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.InventoryJobOrBuilder getInventoryJobOrBuilder() {
      return inventoryJob_;
    }

    private void initFields() {
      inventoryJob_ = com.impinj.stp.StpApi.InventoryJob.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, inventoryJob_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, inventoryJob_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetInventoryJobCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetInventoryJobCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetInventoryJobCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetInventoryJobCommand.class, com.impinj.stp.StpApi.SetInventoryJobCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetInventoryJobCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getInventoryJobFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (inventoryJobBuilder_ == null) {
          inventoryJob_ = com.impinj.stp.StpApi.InventoryJob.getDefaultInstance();
        } else {
          inventoryJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobCommand_descriptor;
      }

      public com.impinj.stp.StpApi.SetInventoryJobCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetInventoryJobCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetInventoryJobCommand build() {
        com.impinj.stp.StpApi.SetInventoryJobCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetInventoryJobCommand buildPartial() {
        com.impinj.stp.StpApi.SetInventoryJobCommand result = new com.impinj.stp.StpApi.SetInventoryJobCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (inventoryJobBuilder_ == null) {
          result.inventoryJob_ = inventoryJob_;
        } else {
          result.inventoryJob_ = inventoryJobBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetInventoryJobCommand) {
          return mergeFrom((com.impinj.stp.StpApi.SetInventoryJobCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetInventoryJobCommand other) {
        if (other == com.impinj.stp.StpApi.SetInventoryJobCommand.getDefaultInstance()) return this;
        if (other.hasInventoryJob()) {
          mergeInventoryJob(other.getInventoryJob());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetInventoryJobCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetInventoryJobCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.InventoryJob inventory_job = 1;
      private com.impinj.stp.StpApi.InventoryJob inventoryJob_ = com.impinj.stp.StpApi.InventoryJob.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.InventoryJob, com.impinj.stp.StpApi.InventoryJob.Builder, com.impinj.stp.StpApi.InventoryJobOrBuilder> inventoryJobBuilder_;
      /**
       */
      public boolean hasInventoryJob() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.InventoryJob getInventoryJob() {
        if (inventoryJobBuilder_ == null) {
          return inventoryJob_;
        } else {
          return inventoryJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setInventoryJob(com.impinj.stp.StpApi.InventoryJob value) {
        if (inventoryJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          inventoryJob_ = value;
          onChanged();
        } else {
          inventoryJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setInventoryJob(
          com.impinj.stp.StpApi.InventoryJob.Builder builderForValue) {
        if (inventoryJobBuilder_ == null) {
          inventoryJob_ = builderForValue.build();
          onChanged();
        } else {
          inventoryJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeInventoryJob(com.impinj.stp.StpApi.InventoryJob value) {
        if (inventoryJobBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              inventoryJob_ != com.impinj.stp.StpApi.InventoryJob.getDefaultInstance()) {
            inventoryJob_ =
              com.impinj.stp.StpApi.InventoryJob.newBuilder(inventoryJob_).mergeFrom(value).buildPartial();
          } else {
            inventoryJob_ = value;
          }
          onChanged();
        } else {
          inventoryJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearInventoryJob() {
        if (inventoryJobBuilder_ == null) {
          inventoryJob_ = com.impinj.stp.StpApi.InventoryJob.getDefaultInstance();
          onChanged();
        } else {
          inventoryJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.InventoryJob.Builder getInventoryJobBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getInventoryJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.InventoryJobOrBuilder getInventoryJobOrBuilder() {
        if (inventoryJobBuilder_ != null) {
          return inventoryJobBuilder_.getMessageOrBuilder();
        } else {
          return inventoryJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.InventoryJob, com.impinj.stp.StpApi.InventoryJob.Builder, com.impinj.stp.StpApi.InventoryJobOrBuilder> 
          getInventoryJobFieldBuilder() {
        if (inventoryJobBuilder_ == null) {
          inventoryJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.InventoryJob, com.impinj.stp.StpApi.InventoryJob.Builder, com.impinj.stp.StpApi.InventoryJobOrBuilder>(
                  inventoryJob_,
                  getParentForChildren(),
                  isClean());
          inventoryJob_ = null;
        }
        return inventoryJobBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetInventoryJobCommand)
    }

    static {
      defaultInstance = new SetInventoryJobCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetInventoryJobCommand)
  }

  public interface SetCartonContentsJobCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.CartonContentsJob carton_contents_job = 1;
    /**
     */
    boolean hasCartonContentsJob();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsJob getCartonContentsJob();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsJobOrBuilder getCartonContentsJobOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetCartonContentsJobCommand}
   */
  public static final class SetCartonContentsJobCommand extends
      com.google.protobuf.GeneratedMessage
      implements SetCartonContentsJobCommandOrBuilder {
    // Use SetCartonContentsJobCommand.newBuilder() to construct.
    private SetCartonContentsJobCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetCartonContentsJobCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetCartonContentsJobCommand defaultInstance;
    public static SetCartonContentsJobCommand getDefaultInstance() {
      return defaultInstance;
    }

    public SetCartonContentsJobCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetCartonContentsJobCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.CartonContentsJob.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = cartonContentsJob_.toBuilder();
              }
              cartonContentsJob_ = input.readMessage(com.impinj.stp.StpApi.CartonContentsJob.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(cartonContentsJob_);
                cartonContentsJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetCartonContentsJobCommand.class, com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<SetCartonContentsJobCommand> PARSER =
        new com.google.protobuf.AbstractParser<SetCartonContentsJobCommand>() {
      public SetCartonContentsJobCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetCartonContentsJobCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetCartonContentsJobCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.CartonContentsJob carton_contents_job = 1;
    public static final int CARTON_CONTENTS_JOB_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.CartonContentsJob cartonContentsJob_;
    /**
     */
    public boolean hasCartonContentsJob() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsJob getCartonContentsJob() {
      return cartonContentsJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsJobOrBuilder getCartonContentsJobOrBuilder() {
      return cartonContentsJob_;
    }

    private void initFields() {
      cartonContentsJob_ = com.impinj.stp.StpApi.CartonContentsJob.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, cartonContentsJob_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, cartonContentsJob_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetCartonContentsJobCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetCartonContentsJobCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetCartonContentsJobCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetCartonContentsJobCommand.class, com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetCartonContentsJobCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCartonContentsJobFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (cartonContentsJobBuilder_ == null) {
          cartonContentsJob_ = com.impinj.stp.StpApi.CartonContentsJob.getDefaultInstance();
        } else {
          cartonContentsJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobCommand_descriptor;
      }

      public com.impinj.stp.StpApi.SetCartonContentsJobCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetCartonContentsJobCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetCartonContentsJobCommand build() {
        com.impinj.stp.StpApi.SetCartonContentsJobCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetCartonContentsJobCommand buildPartial() {
        com.impinj.stp.StpApi.SetCartonContentsJobCommand result = new com.impinj.stp.StpApi.SetCartonContentsJobCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (cartonContentsJobBuilder_ == null) {
          result.cartonContentsJob_ = cartonContentsJob_;
        } else {
          result.cartonContentsJob_ = cartonContentsJobBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetCartonContentsJobCommand) {
          return mergeFrom((com.impinj.stp.StpApi.SetCartonContentsJobCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetCartonContentsJobCommand other) {
        if (other == com.impinj.stp.StpApi.SetCartonContentsJobCommand.getDefaultInstance()) return this;
        if (other.hasCartonContentsJob()) {
          mergeCartonContentsJob(other.getCartonContentsJob());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetCartonContentsJobCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetCartonContentsJobCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.CartonContentsJob carton_contents_job = 1;
      private com.impinj.stp.StpApi.CartonContentsJob cartonContentsJob_ = com.impinj.stp.StpApi.CartonContentsJob.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsJob, com.impinj.stp.StpApi.CartonContentsJob.Builder, com.impinj.stp.StpApi.CartonContentsJobOrBuilder> cartonContentsJobBuilder_;
      /**
       */
      public boolean hasCartonContentsJob() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsJob getCartonContentsJob() {
        if (cartonContentsJobBuilder_ == null) {
          return cartonContentsJob_;
        } else {
          return cartonContentsJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setCartonContentsJob(com.impinj.stp.StpApi.CartonContentsJob value) {
        if (cartonContentsJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          cartonContentsJob_ = value;
          onChanged();
        } else {
          cartonContentsJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setCartonContentsJob(
          com.impinj.stp.StpApi.CartonContentsJob.Builder builderForValue) {
        if (cartonContentsJobBuilder_ == null) {
          cartonContentsJob_ = builderForValue.build();
          onChanged();
        } else {
          cartonContentsJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeCartonContentsJob(com.impinj.stp.StpApi.CartonContentsJob value) {
        if (cartonContentsJobBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              cartonContentsJob_ != com.impinj.stp.StpApi.CartonContentsJob.getDefaultInstance()) {
            cartonContentsJob_ =
              com.impinj.stp.StpApi.CartonContentsJob.newBuilder(cartonContentsJob_).mergeFrom(value).buildPartial();
          } else {
            cartonContentsJob_ = value;
          }
          onChanged();
        } else {
          cartonContentsJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearCartonContentsJob() {
        if (cartonContentsJobBuilder_ == null) {
          cartonContentsJob_ = com.impinj.stp.StpApi.CartonContentsJob.getDefaultInstance();
          onChanged();
        } else {
          cartonContentsJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsJob.Builder getCartonContentsJobBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getCartonContentsJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsJobOrBuilder getCartonContentsJobOrBuilder() {
        if (cartonContentsJobBuilder_ != null) {
          return cartonContentsJobBuilder_.getMessageOrBuilder();
        } else {
          return cartonContentsJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsJob, com.impinj.stp.StpApi.CartonContentsJob.Builder, com.impinj.stp.StpApi.CartonContentsJobOrBuilder> 
          getCartonContentsJobFieldBuilder() {
        if (cartonContentsJobBuilder_ == null) {
          cartonContentsJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.CartonContentsJob, com.impinj.stp.StpApi.CartonContentsJob.Builder, com.impinj.stp.StpApi.CartonContentsJobOrBuilder>(
                  cartonContentsJob_,
                  getParentForChildren(),
                  isClean());
          cartonContentsJob_ = null;
        }
        return cartonContentsJobBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetCartonContentsJobCommand)
    }

    static {
      defaultInstance = new SetCartonContentsJobCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetCartonContentsJobCommand)
  }

  public interface GetOperationDataCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool reserved = 1;
    /**
     */
    boolean hasReserved();
    /**
     */
    boolean getReserved();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetOperationDataCommand}
   */
  public static final class GetOperationDataCommand extends
      com.google.protobuf.GeneratedMessage
      implements GetOperationDataCommandOrBuilder {
    // Use GetOperationDataCommand.newBuilder() to construct.
    private GetOperationDataCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetOperationDataCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetOperationDataCommand defaultInstance;
    public static GetOperationDataCommand getDefaultInstance() {
      return defaultInstance;
    }

    public GetOperationDataCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetOperationDataCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetOperationDataCommand.class, com.impinj.stp.StpApi.GetOperationDataCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<GetOperationDataCommand> PARSER =
        new com.google.protobuf.AbstractParser<GetOperationDataCommand>() {
      public GetOperationDataCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetOperationDataCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetOperationDataCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool reserved = 1;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private boolean reserved_;
    /**
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public boolean getReserved() {
      return reserved_;
    }

    private void initFields() {
      reserved_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, reserved_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, reserved_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetOperationDataCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetOperationDataCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetOperationDataCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetOperationDataCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetOperationDataCommand.class, com.impinj.stp.StpApi.GetOperationDataCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetOperationDataCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reserved_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataCommand_descriptor;
      }

      public com.impinj.stp.StpApi.GetOperationDataCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetOperationDataCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetOperationDataCommand build() {
        com.impinj.stp.StpApi.GetOperationDataCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetOperationDataCommand buildPartial() {
        com.impinj.stp.StpApi.GetOperationDataCommand result = new com.impinj.stp.StpApi.GetOperationDataCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reserved_ = reserved_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetOperationDataCommand) {
          return mergeFrom((com.impinj.stp.StpApi.GetOperationDataCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetOperationDataCommand other) {
        if (other == com.impinj.stp.StpApi.GetOperationDataCommand.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetOperationDataCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetOperationDataCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool reserved = 1;
      private boolean reserved_ ;
      /**
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public boolean getReserved() {
        return reserved_;
      }
      /**
       */
      public Builder setReserved(boolean value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetOperationDataCommand)
    }

    static {
      defaultInstance = new GetOperationDataCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetOperationDataCommand)
  }

  public interface AddLicenseKeyCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.LicenseKey license_key = 1;
    /**
     */
    boolean hasLicenseKey();
    /**
     */
    com.impinj.stp.StpApi.LicenseKey getLicenseKey();
    /**
     */
    com.impinj.stp.StpApi.LicenseKeyOrBuilder getLicenseKeyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddLicenseKeyCommand}
   */
  public static final class AddLicenseKeyCommand extends
      com.google.protobuf.GeneratedMessage
      implements AddLicenseKeyCommandOrBuilder {
    // Use AddLicenseKeyCommand.newBuilder() to construct.
    private AddLicenseKeyCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddLicenseKeyCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddLicenseKeyCommand defaultInstance;
    public static AddLicenseKeyCommand getDefaultInstance() {
      return defaultInstance;
    }

    public AddLicenseKeyCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddLicenseKeyCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.LicenseKey.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = licenseKey_.toBuilder();
              }
              licenseKey_ = input.readMessage(com.impinj.stp.StpApi.LicenseKey.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(licenseKey_);
                licenseKey_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddLicenseKeyCommand.class, com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<AddLicenseKeyCommand> PARSER =
        new com.google.protobuf.AbstractParser<AddLicenseKeyCommand>() {
      public AddLicenseKeyCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddLicenseKeyCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddLicenseKeyCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.LicenseKey license_key = 1;
    public static final int LICENSE_KEY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.LicenseKey licenseKey_;
    /**
     */
    public boolean hasLicenseKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.LicenseKey getLicenseKey() {
      return licenseKey_;
    }
    /**
     */
    public com.impinj.stp.StpApi.LicenseKeyOrBuilder getLicenseKeyOrBuilder() {
      return licenseKey_;
    }

    private void initFields() {
      licenseKey_ = com.impinj.stp.StpApi.LicenseKey.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasLicenseKey()) {
        if (!getLicenseKey().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, licenseKey_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, licenseKey_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddLicenseKeyCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddLicenseKeyCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddLicenseKeyCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddLicenseKeyCommand.class, com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddLicenseKeyCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getLicenseKeyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (licenseKeyBuilder_ == null) {
          licenseKey_ = com.impinj.stp.StpApi.LicenseKey.getDefaultInstance();
        } else {
          licenseKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyCommand_descriptor;
      }

      public com.impinj.stp.StpApi.AddLicenseKeyCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddLicenseKeyCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddLicenseKeyCommand build() {
        com.impinj.stp.StpApi.AddLicenseKeyCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddLicenseKeyCommand buildPartial() {
        com.impinj.stp.StpApi.AddLicenseKeyCommand result = new com.impinj.stp.StpApi.AddLicenseKeyCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (licenseKeyBuilder_ == null) {
          result.licenseKey_ = licenseKey_;
        } else {
          result.licenseKey_ = licenseKeyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddLicenseKeyCommand) {
          return mergeFrom((com.impinj.stp.StpApi.AddLicenseKeyCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddLicenseKeyCommand other) {
        if (other == com.impinj.stp.StpApi.AddLicenseKeyCommand.getDefaultInstance()) return this;
        if (other.hasLicenseKey()) {
          mergeLicenseKey(other.getLicenseKey());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasLicenseKey()) {
          if (!getLicenseKey().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddLicenseKeyCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddLicenseKeyCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.LicenseKey license_key = 1;
      private com.impinj.stp.StpApi.LicenseKey licenseKey_ = com.impinj.stp.StpApi.LicenseKey.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LicenseKey, com.impinj.stp.StpApi.LicenseKey.Builder, com.impinj.stp.StpApi.LicenseKeyOrBuilder> licenseKeyBuilder_;
      /**
       */
      public boolean hasLicenseKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.LicenseKey getLicenseKey() {
        if (licenseKeyBuilder_ == null) {
          return licenseKey_;
        } else {
          return licenseKeyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setLicenseKey(com.impinj.stp.StpApi.LicenseKey value) {
        if (licenseKeyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          licenseKey_ = value;
          onChanged();
        } else {
          licenseKeyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setLicenseKey(
          com.impinj.stp.StpApi.LicenseKey.Builder builderForValue) {
        if (licenseKeyBuilder_ == null) {
          licenseKey_ = builderForValue.build();
          onChanged();
        } else {
          licenseKeyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeLicenseKey(com.impinj.stp.StpApi.LicenseKey value) {
        if (licenseKeyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              licenseKey_ != com.impinj.stp.StpApi.LicenseKey.getDefaultInstance()) {
            licenseKey_ =
              com.impinj.stp.StpApi.LicenseKey.newBuilder(licenseKey_).mergeFrom(value).buildPartial();
          } else {
            licenseKey_ = value;
          }
          onChanged();
        } else {
          licenseKeyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearLicenseKey() {
        if (licenseKeyBuilder_ == null) {
          licenseKey_ = com.impinj.stp.StpApi.LicenseKey.getDefaultInstance();
          onChanged();
        } else {
          licenseKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.LicenseKey.Builder getLicenseKeyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getLicenseKeyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.LicenseKeyOrBuilder getLicenseKeyOrBuilder() {
        if (licenseKeyBuilder_ != null) {
          return licenseKeyBuilder_.getMessageOrBuilder();
        } else {
          return licenseKey_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.LicenseKey, com.impinj.stp.StpApi.LicenseKey.Builder, com.impinj.stp.StpApi.LicenseKeyOrBuilder> 
          getLicenseKeyFieldBuilder() {
        if (licenseKeyBuilder_ == null) {
          licenseKeyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.LicenseKey, com.impinj.stp.StpApi.LicenseKey.Builder, com.impinj.stp.StpApi.LicenseKeyOrBuilder>(
                  licenseKey_,
                  getParentForChildren(),
                  isClean());
          licenseKey_ = null;
        }
        return licenseKeyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddLicenseKeyCommand)
    }

    static {
      defaultInstance = new AddLicenseKeyCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddLicenseKeyCommand)
  }

  public interface AddTIDTableEntriesCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.TIDTableEntries table_entries = 1;
    /**
     */
    boolean hasTableEntries();
    /**
     */
    com.impinj.stp.StpApi.TIDTableEntries getTableEntries();
    /**
     */
    com.impinj.stp.StpApi.TIDTableEntriesOrBuilder getTableEntriesOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddTIDTableEntriesCommand}
   *
   * Send a list of tag operations to perform.
   */
  public static final class AddTIDTableEntriesCommand extends
      com.google.protobuf.GeneratedMessage
      implements AddTIDTableEntriesCommandOrBuilder {
    // Use AddTIDTableEntriesCommand.newBuilder() to construct.
    private AddTIDTableEntriesCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddTIDTableEntriesCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddTIDTableEntriesCommand defaultInstance;
    public static AddTIDTableEntriesCommand getDefaultInstance() {
      return defaultInstance;
    }

    public AddTIDTableEntriesCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddTIDTableEntriesCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.TIDTableEntries.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = tableEntries_.toBuilder();
              }
              tableEntries_ = input.readMessage(com.impinj.stp.StpApi.TIDTableEntries.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tableEntries_);
                tableEntries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddTIDTableEntriesCommand.class, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<AddTIDTableEntriesCommand> PARSER =
        new com.google.protobuf.AbstractParser<AddTIDTableEntriesCommand>() {
      public AddTIDTableEntriesCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddTIDTableEntriesCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddTIDTableEntriesCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.TIDTableEntries table_entries = 1;
    public static final int TABLE_ENTRIES_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.TIDTableEntries tableEntries_;
    /**
     */
    public boolean hasTableEntries() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDTableEntries getTableEntries() {
      return tableEntries_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TIDTableEntriesOrBuilder getTableEntriesOrBuilder() {
      return tableEntries_;
    }

    private void initFields() {
      tableEntries_ = com.impinj.stp.StpApi.TIDTableEntries.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasTableEntries()) {
        if (!getTableEntries().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, tableEntries_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, tableEntries_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddTIDTableEntriesCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddTIDTableEntriesCommand}
     *
     * Send a list of tag operations to perform.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddTIDTableEntriesCommand.class, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddTIDTableEntriesCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTableEntriesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (tableEntriesBuilder_ == null) {
          tableEntries_ = com.impinj.stp.StpApi.TIDTableEntries.getDefaultInstance();
        } else {
          tableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesCommand_descriptor;
      }

      public com.impinj.stp.StpApi.AddTIDTableEntriesCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddTIDTableEntriesCommand build() {
        com.impinj.stp.StpApi.AddTIDTableEntriesCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddTIDTableEntriesCommand buildPartial() {
        com.impinj.stp.StpApi.AddTIDTableEntriesCommand result = new com.impinj.stp.StpApi.AddTIDTableEntriesCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (tableEntriesBuilder_ == null) {
          result.tableEntries_ = tableEntries_;
        } else {
          result.tableEntries_ = tableEntriesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddTIDTableEntriesCommand) {
          return mergeFrom((com.impinj.stp.StpApi.AddTIDTableEntriesCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddTIDTableEntriesCommand other) {
        if (other == com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance()) return this;
        if (other.hasTableEntries()) {
          mergeTableEntries(other.getTableEntries());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasTableEntries()) {
          if (!getTableEntries().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddTIDTableEntriesCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddTIDTableEntriesCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.TIDTableEntries table_entries = 1;
      private com.impinj.stp.StpApi.TIDTableEntries tableEntries_ = com.impinj.stp.StpApi.TIDTableEntries.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDTableEntries, com.impinj.stp.StpApi.TIDTableEntries.Builder, com.impinj.stp.StpApi.TIDTableEntriesOrBuilder> tableEntriesBuilder_;
      /**
       */
      public boolean hasTableEntries() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntries getTableEntries() {
        if (tableEntriesBuilder_ == null) {
          return tableEntries_;
        } else {
          return tableEntriesBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTableEntries(com.impinj.stp.StpApi.TIDTableEntries value) {
        if (tableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tableEntries_ = value;
          onChanged();
        } else {
          tableEntriesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setTableEntries(
          com.impinj.stp.StpApi.TIDTableEntries.Builder builderForValue) {
        if (tableEntriesBuilder_ == null) {
          tableEntries_ = builderForValue.build();
          onChanged();
        } else {
          tableEntriesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeTableEntries(com.impinj.stp.StpApi.TIDTableEntries value) {
        if (tableEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              tableEntries_ != com.impinj.stp.StpApi.TIDTableEntries.getDefaultInstance()) {
            tableEntries_ =
              com.impinj.stp.StpApi.TIDTableEntries.newBuilder(tableEntries_).mergeFrom(value).buildPartial();
          } else {
            tableEntries_ = value;
          }
          onChanged();
        } else {
          tableEntriesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearTableEntries() {
        if (tableEntriesBuilder_ == null) {
          tableEntries_ = com.impinj.stp.StpApi.TIDTableEntries.getDefaultInstance();
          onChanged();
        } else {
          tableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntries.Builder getTableEntriesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTableEntriesFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TIDTableEntriesOrBuilder getTableEntriesOrBuilder() {
        if (tableEntriesBuilder_ != null) {
          return tableEntriesBuilder_.getMessageOrBuilder();
        } else {
          return tableEntries_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TIDTableEntries, com.impinj.stp.StpApi.TIDTableEntries.Builder, com.impinj.stp.StpApi.TIDTableEntriesOrBuilder> 
          getTableEntriesFieldBuilder() {
        if (tableEntriesBuilder_ == null) {
          tableEntriesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TIDTableEntries, com.impinj.stp.StpApi.TIDTableEntries.Builder, com.impinj.stp.StpApi.TIDTableEntriesOrBuilder>(
                  tableEntries_,
                  getParentForChildren(),
                  isClean());
          tableEntries_ = null;
        }
        return tableEntriesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddTIDTableEntriesCommand)
    }

    static {
      defaultInstance = new AddTIDTableEntriesCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddTIDTableEntriesCommand)
  }

  public interface AddOrderedListEntriesCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.OrderedListEntries ordered_list_entries = 1;
    /**
     */
    boolean hasOrderedListEntries();
    /**
     */
    com.impinj.stp.StpApi.OrderedListEntries getOrderedListEntries();
    /**
     */
    com.impinj.stp.StpApi.OrderedListEntriesOrBuilder getOrderedListEntriesOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddOrderedListEntriesCommand}
   *
   * Send a list of tag operations to perform.
   */
  public static final class AddOrderedListEntriesCommand extends
      com.google.protobuf.GeneratedMessage
      implements AddOrderedListEntriesCommandOrBuilder {
    // Use AddOrderedListEntriesCommand.newBuilder() to construct.
    private AddOrderedListEntriesCommand(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddOrderedListEntriesCommand(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddOrderedListEntriesCommand defaultInstance;
    public static AddOrderedListEntriesCommand getDefaultInstance() {
      return defaultInstance;
    }

    public AddOrderedListEntriesCommand getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddOrderedListEntriesCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.OrderedListEntries.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = orderedListEntries_.toBuilder();
              }
              orderedListEntries_ = input.readMessage(com.impinj.stp.StpApi.OrderedListEntries.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(orderedListEntries_);
                orderedListEntries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesCommand_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddOrderedListEntriesCommand.class, com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder.class);
    }

    public static com.google.protobuf.Parser<AddOrderedListEntriesCommand> PARSER =
        new com.google.protobuf.AbstractParser<AddOrderedListEntriesCommand>() {
      public AddOrderedListEntriesCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddOrderedListEntriesCommand(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddOrderedListEntriesCommand> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.OrderedListEntries ordered_list_entries = 1;
    public static final int ORDERED_LIST_ENTRIES_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.OrderedListEntries orderedListEntries_;
    /**
     */
    public boolean hasOrderedListEntries() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.OrderedListEntries getOrderedListEntries() {
      return orderedListEntries_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OrderedListEntriesOrBuilder getOrderedListEntriesOrBuilder() {
      return orderedListEntries_;
    }

    private void initFields() {
      orderedListEntries_ = com.impinj.stp.StpApi.OrderedListEntries.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasOrderedListEntries()) {
        if (!getOrderedListEntries().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, orderedListEntries_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, orderedListEntries_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddOrderedListEntriesCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddOrderedListEntriesCommand}
     *
     * Send a list of tag operations to perform.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddOrderedListEntriesCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesCommand_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddOrderedListEntriesCommand.class, com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddOrderedListEntriesCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOrderedListEntriesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntries_ = com.impinj.stp.StpApi.OrderedListEntries.getDefaultInstance();
        } else {
          orderedListEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesCommand_descriptor;
      }

      public com.impinj.stp.StpApi.AddOrderedListEntriesCommand getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddOrderedListEntriesCommand.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddOrderedListEntriesCommand build() {
        com.impinj.stp.StpApi.AddOrderedListEntriesCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddOrderedListEntriesCommand buildPartial() {
        com.impinj.stp.StpApi.AddOrderedListEntriesCommand result = new com.impinj.stp.StpApi.AddOrderedListEntriesCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (orderedListEntriesBuilder_ == null) {
          result.orderedListEntries_ = orderedListEntries_;
        } else {
          result.orderedListEntries_ = orderedListEntriesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddOrderedListEntriesCommand) {
          return mergeFrom((com.impinj.stp.StpApi.AddOrderedListEntriesCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddOrderedListEntriesCommand other) {
        if (other == com.impinj.stp.StpApi.AddOrderedListEntriesCommand.getDefaultInstance()) return this;
        if (other.hasOrderedListEntries()) {
          mergeOrderedListEntries(other.getOrderedListEntries());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasOrderedListEntries()) {
          if (!getOrderedListEntries().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddOrderedListEntriesCommand parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddOrderedListEntriesCommand) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.OrderedListEntries ordered_list_entries = 1;
      private com.impinj.stp.StpApi.OrderedListEntries orderedListEntries_ = com.impinj.stp.StpApi.OrderedListEntries.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OrderedListEntries, com.impinj.stp.StpApi.OrderedListEntries.Builder, com.impinj.stp.StpApi.OrderedListEntriesOrBuilder> orderedListEntriesBuilder_;
      /**
       */
      public boolean hasOrderedListEntries() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntries getOrderedListEntries() {
        if (orderedListEntriesBuilder_ == null) {
          return orderedListEntries_;
        } else {
          return orderedListEntriesBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOrderedListEntries(com.impinj.stp.StpApi.OrderedListEntries value) {
        if (orderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          orderedListEntries_ = value;
          onChanged();
        } else {
          orderedListEntriesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setOrderedListEntries(
          com.impinj.stp.StpApi.OrderedListEntries.Builder builderForValue) {
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntries_ = builderForValue.build();
          onChanged();
        } else {
          orderedListEntriesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeOrderedListEntries(com.impinj.stp.StpApi.OrderedListEntries value) {
        if (orderedListEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              orderedListEntries_ != com.impinj.stp.StpApi.OrderedListEntries.getDefaultInstance()) {
            orderedListEntries_ =
              com.impinj.stp.StpApi.OrderedListEntries.newBuilder(orderedListEntries_).mergeFrom(value).buildPartial();
          } else {
            orderedListEntries_ = value;
          }
          onChanged();
        } else {
          orderedListEntriesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearOrderedListEntries() {
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntries_ = com.impinj.stp.StpApi.OrderedListEntries.getDefaultInstance();
          onChanged();
        } else {
          orderedListEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntries.Builder getOrderedListEntriesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getOrderedListEntriesFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OrderedListEntriesOrBuilder getOrderedListEntriesOrBuilder() {
        if (orderedListEntriesBuilder_ != null) {
          return orderedListEntriesBuilder_.getMessageOrBuilder();
        } else {
          return orderedListEntries_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OrderedListEntries, com.impinj.stp.StpApi.OrderedListEntries.Builder, com.impinj.stp.StpApi.OrderedListEntriesOrBuilder> 
          getOrderedListEntriesFieldBuilder() {
        if (orderedListEntriesBuilder_ == null) {
          orderedListEntriesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OrderedListEntries, com.impinj.stp.StpApi.OrderedListEntries.Builder, com.impinj.stp.StpApi.OrderedListEntriesOrBuilder>(
                  orderedListEntries_,
                  getParentForChildren(),
                  isClean());
          orderedListEntries_ = null;
        }
        return orderedListEntriesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddOrderedListEntriesCommand)
    }

    static {
      defaultInstance = new AddOrderedListEntriesCommand(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddOrderedListEntriesCommand)
  }

  public interface StartRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.StartResp}
   *
   * The reply to StartCommand_.
   */
  public static final class StartResp extends
      com.google.protobuf.GeneratedMessage
      implements StartRespOrBuilder {
    // Use StartResp.newBuilder() to construct.
    private StartResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StartResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StartResp defaultInstance;
    public static StartResp getDefaultInstance() {
      return defaultInstance;
    }

    public StartResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StartResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.StartResp.class, com.impinj.stp.StpApi.StartResp.Builder.class);
    }

    public static com.google.protobuf.Parser<StartResp> PARSER =
        new com.google.protobuf.AbstractParser<StartResp>() {
      public StartResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StartResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StartResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.StartResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StartResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.StartResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StartResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.StartResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.StartResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.StartResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.StartResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.StartResp}
     *
     * The reply to StartCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.StartRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.StartResp.class, com.impinj.stp.StpApi.StartResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.StartResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_StartResp_descriptor;
      }

      public com.impinj.stp.StpApi.StartResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.StartResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.StartResp build() {
        com.impinj.stp.StpApi.StartResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.StartResp buildPartial() {
        com.impinj.stp.StpApi.StartResp result = new com.impinj.stp.StpApi.StartResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.StartResp) {
          return mergeFrom((com.impinj.stp.StpApi.StartResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.StartResp other) {
        if (other == com.impinj.stp.StpApi.StartResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.StartResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.StartResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.StartResp)
    }

    static {
      defaultInstance = new StartResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.StartResp)
  }

  public interface SetDeviceConfigRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetDeviceConfigResp}
   *
   * See SetDeviceConfigCommand_.
   */
  public static final class SetDeviceConfigResp extends
      com.google.protobuf.GeneratedMessage
      implements SetDeviceConfigRespOrBuilder {
    // Use SetDeviceConfigResp.newBuilder() to construct.
    private SetDeviceConfigResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetDeviceConfigResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetDeviceConfigResp defaultInstance;
    public static SetDeviceConfigResp getDefaultInstance() {
      return defaultInstance;
    }

    public SetDeviceConfigResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetDeviceConfigResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetDeviceConfigResp.class, com.impinj.stp.StpApi.SetDeviceConfigResp.Builder.class);
    }

    public static com.google.protobuf.Parser<SetDeviceConfigResp> PARSER =
        new com.google.protobuf.AbstractParser<SetDeviceConfigResp>() {
      public SetDeviceConfigResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetDeviceConfigResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetDeviceConfigResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetDeviceConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetDeviceConfigResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetDeviceConfigResp}
     *
     * See SetDeviceConfigCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetDeviceConfigRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetDeviceConfigResp.class, com.impinj.stp.StpApi.SetDeviceConfigResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetDeviceConfigResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetDeviceConfigResp_descriptor;
      }

      public com.impinj.stp.StpApi.SetDeviceConfigResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetDeviceConfigResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetDeviceConfigResp build() {
        com.impinj.stp.StpApi.SetDeviceConfigResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetDeviceConfigResp buildPartial() {
        com.impinj.stp.StpApi.SetDeviceConfigResp result = new com.impinj.stp.StpApi.SetDeviceConfigResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetDeviceConfigResp) {
          return mergeFrom((com.impinj.stp.StpApi.SetDeviceConfigResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetDeviceConfigResp other) {
        if (other == com.impinj.stp.StpApi.SetDeviceConfigResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetDeviceConfigResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetDeviceConfigResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetDeviceConfigResp)
    }

    static {
      defaultInstance = new SetDeviceConfigResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetDeviceConfigResp)
  }

  public interface GetDeviceConfigRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();

    // optional .Impinj.STP.DeviceConfig device_config = 2;
    /**
     */
    boolean hasDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.DeviceConfig getDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetDeviceConfigResp}
   *
   * Return the device configuration.  See
   * GetDeviceConfigCommand_.
   */
  public static final class GetDeviceConfigResp extends
      com.google.protobuf.GeneratedMessage
      implements GetDeviceConfigRespOrBuilder {
    // Use GetDeviceConfigResp.newBuilder() to construct.
    private GetDeviceConfigResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetDeviceConfigResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetDeviceConfigResp defaultInstance;
    public static GetDeviceConfigResp getDefaultInstance() {
      return defaultInstance;
    }

    public GetDeviceConfigResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetDeviceConfigResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.DeviceConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = deviceConfig_.toBuilder();
              }
              deviceConfig_ = input.readMessage(com.impinj.stp.StpApi.DeviceConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceConfig_);
                deviceConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetDeviceConfigResp.class, com.impinj.stp.StpApi.GetDeviceConfigResp.Builder.class);
    }

    public static com.google.protobuf.Parser<GetDeviceConfigResp> PARSER =
        new com.google.protobuf.AbstractParser<GetDeviceConfigResp>() {
      public GetDeviceConfigResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetDeviceConfigResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetDeviceConfigResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    // optional .Impinj.STP.DeviceConfig device_config = 2;
    public static final int DEVICE_CONFIG_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.DeviceConfig deviceConfig_;
    /**
     */
    public boolean hasDeviceConfig() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceConfig getDeviceConfig() {
      return deviceConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
      return deviceConfig_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasDeviceConfig()) {
        if (!getDeviceConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, deviceConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, deviceConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetDeviceConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetDeviceConfigResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetDeviceConfigResp}
     *
     * Return the device configuration.  See
     * GetDeviceConfigCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetDeviceConfigRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetDeviceConfigResp.class, com.impinj.stp.StpApi.GetDeviceConfigResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetDeviceConfigResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
          getDeviceConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (deviceConfigBuilder_ == null) {
          deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
        } else {
          deviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetDeviceConfigResp_descriptor;
      }

      public com.impinj.stp.StpApi.GetDeviceConfigResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetDeviceConfigResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetDeviceConfigResp build() {
        com.impinj.stp.StpApi.GetDeviceConfigResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetDeviceConfigResp buildPartial() {
        com.impinj.stp.StpApi.GetDeviceConfigResp result = new com.impinj.stp.StpApi.GetDeviceConfigResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (deviceConfigBuilder_ == null) {
          result.deviceConfig_ = deviceConfig_;
        } else {
          result.deviceConfig_ = deviceConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetDeviceConfigResp) {
          return mergeFrom((com.impinj.stp.StpApi.GetDeviceConfigResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetDeviceConfigResp other) {
        if (other == com.impinj.stp.StpApi.GetDeviceConfigResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        if (other.hasDeviceConfig()) {
          mergeDeviceConfig(other.getDeviceConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        if (hasDeviceConfig()) {
          if (!getDeviceConfig().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetDeviceConfigResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetDeviceConfigResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // optional .Impinj.STP.DeviceConfig device_config = 2;
      private com.impinj.stp.StpApi.DeviceConfig deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceConfig, com.impinj.stp.StpApi.DeviceConfig.Builder, com.impinj.stp.StpApi.DeviceConfigOrBuilder> deviceConfigBuilder_;
      /**
       */
      public boolean hasDeviceConfig() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceConfig getDeviceConfig() {
        if (deviceConfigBuilder_ == null) {
          return deviceConfig_;
        } else {
          return deviceConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setDeviceConfig(com.impinj.stp.StpApi.DeviceConfig value) {
        if (deviceConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceConfig_ = value;
          onChanged();
        } else {
          deviceConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setDeviceConfig(
          com.impinj.stp.StpApi.DeviceConfig.Builder builderForValue) {
        if (deviceConfigBuilder_ == null) {
          deviceConfig_ = builderForValue.build();
          onChanged();
        } else {
          deviceConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeDeviceConfig(com.impinj.stp.StpApi.DeviceConfig value) {
        if (deviceConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              deviceConfig_ != com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance()) {
            deviceConfig_ =
              com.impinj.stp.StpApi.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
          } else {
            deviceConfig_ = value;
          }
          onChanged();
        } else {
          deviceConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearDeviceConfig() {
        if (deviceConfigBuilder_ == null) {
          deviceConfig_ = com.impinj.stp.StpApi.DeviceConfig.getDefaultInstance();
          onChanged();
        } else {
          deviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceConfig.Builder getDeviceConfigBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDeviceConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
        if (deviceConfigBuilder_ != null) {
          return deviceConfigBuilder_.getMessageOrBuilder();
        } else {
          return deviceConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceConfig, com.impinj.stp.StpApi.DeviceConfig.Builder, com.impinj.stp.StpApi.DeviceConfigOrBuilder> 
          getDeviceConfigFieldBuilder() {
        if (deviceConfigBuilder_ == null) {
          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DeviceConfig, com.impinj.stp.StpApi.DeviceConfig.Builder, com.impinj.stp.StpApi.DeviceConfigOrBuilder>(
                  deviceConfig_,
                  getParentForChildren(),
                  isClean());
          deviceConfig_ = null;
        }
        return deviceConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetDeviceConfigResp)
    }

    static {
      defaultInstance = new GetDeviceConfigResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetDeviceConfigResp)
  }

  public interface SetAntennaConfigRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetAntennaConfigResp}
   *
   * See SetAntennaConfigCommand_.
   */
  public static final class SetAntennaConfigResp extends
      com.google.protobuf.GeneratedMessage
      implements SetAntennaConfigRespOrBuilder {
    // Use SetAntennaConfigResp.newBuilder() to construct.
    private SetAntennaConfigResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetAntennaConfigResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetAntennaConfigResp defaultInstance;
    public static SetAntennaConfigResp getDefaultInstance() {
      return defaultInstance;
    }

    public SetAntennaConfigResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetAntennaConfigResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetAntennaConfigResp.class, com.impinj.stp.StpApi.SetAntennaConfigResp.Builder.class);
    }

    public static com.google.protobuf.Parser<SetAntennaConfigResp> PARSER =
        new com.google.protobuf.AbstractParser<SetAntennaConfigResp>() {
      public SetAntennaConfigResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetAntennaConfigResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetAntennaConfigResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetAntennaConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetAntennaConfigResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetAntennaConfigResp}
     *
     * See SetAntennaConfigCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetAntennaConfigRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetAntennaConfigResp.class, com.impinj.stp.StpApi.SetAntennaConfigResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetAntennaConfigResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetAntennaConfigResp_descriptor;
      }

      public com.impinj.stp.StpApi.SetAntennaConfigResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetAntennaConfigResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetAntennaConfigResp build() {
        com.impinj.stp.StpApi.SetAntennaConfigResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetAntennaConfigResp buildPartial() {
        com.impinj.stp.StpApi.SetAntennaConfigResp result = new com.impinj.stp.StpApi.SetAntennaConfigResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetAntennaConfigResp) {
          return mergeFrom((com.impinj.stp.StpApi.SetAntennaConfigResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetAntennaConfigResp other) {
        if (other == com.impinj.stp.StpApi.SetAntennaConfigResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetAntennaConfigResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetAntennaConfigResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetAntennaConfigResp)
    }

    static {
      defaultInstance = new SetAntennaConfigResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetAntennaConfigResp)
  }

  public interface GetAntennaConfigRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();

    // optional .Impinj.STP.AntennasConfig antennas_config = 2;
    /**
     */
    boolean hasAntennasConfig();
    /**
     */
    com.impinj.stp.StpApi.AntennasConfig getAntennasConfig();
    /**
     */
    com.impinj.stp.StpApi.AntennasConfigOrBuilder getAntennasConfigOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetAntennaConfigResp}
   *
   * Return the configuration which was set on all antennas.
   */
  public static final class GetAntennaConfigResp extends
      com.google.protobuf.GeneratedMessage
      implements GetAntennaConfigRespOrBuilder {
    // Use GetAntennaConfigResp.newBuilder() to construct.
    private GetAntennaConfigResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetAntennaConfigResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetAntennaConfigResp defaultInstance;
    public static GetAntennaConfigResp getDefaultInstance() {
      return defaultInstance;
    }

    public GetAntennaConfigResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetAntennaConfigResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.AntennasConfig.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = antennasConfig_.toBuilder();
              }
              antennasConfig_ = input.readMessage(com.impinj.stp.StpApi.AntennasConfig.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(antennasConfig_);
                antennasConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetAntennaConfigResp.class, com.impinj.stp.StpApi.GetAntennaConfigResp.Builder.class);
    }

    public static com.google.protobuf.Parser<GetAntennaConfigResp> PARSER =
        new com.google.protobuf.AbstractParser<GetAntennaConfigResp>() {
      public GetAntennaConfigResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetAntennaConfigResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetAntennaConfigResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    // optional .Impinj.STP.AntennasConfig antennas_config = 2;
    public static final int ANTENNAS_CONFIG_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.AntennasConfig antennasConfig_;
    /**
     */
    public boolean hasAntennasConfig() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.AntennasConfig getAntennasConfig() {
      return antennasConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AntennasConfigOrBuilder getAntennasConfigOrBuilder() {
      return antennasConfig_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAntennasConfig()) {
        if (!getAntennasConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, antennasConfig_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, antennasConfig_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetAntennaConfigResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetAntennaConfigResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetAntennaConfigResp}
     *
     * Return the configuration which was set on all antennas.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetAntennaConfigRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetAntennaConfigResp.class, com.impinj.stp.StpApi.GetAntennaConfigResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetAntennaConfigResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
          getAntennasConfigFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (antennasConfigBuilder_ == null) {
          antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
        } else {
          antennasConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetAntennaConfigResp_descriptor;
      }

      public com.impinj.stp.StpApi.GetAntennaConfigResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetAntennaConfigResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetAntennaConfigResp build() {
        com.impinj.stp.StpApi.GetAntennaConfigResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetAntennaConfigResp buildPartial() {
        com.impinj.stp.StpApi.GetAntennaConfigResp result = new com.impinj.stp.StpApi.GetAntennaConfigResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (antennasConfigBuilder_ == null) {
          result.antennasConfig_ = antennasConfig_;
        } else {
          result.antennasConfig_ = antennasConfigBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetAntennaConfigResp) {
          return mergeFrom((com.impinj.stp.StpApi.GetAntennaConfigResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetAntennaConfigResp other) {
        if (other == com.impinj.stp.StpApi.GetAntennaConfigResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        if (other.hasAntennasConfig()) {
          mergeAntennasConfig(other.getAntennasConfig());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        if (hasAntennasConfig()) {
          if (!getAntennasConfig().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetAntennaConfigResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetAntennaConfigResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // optional .Impinj.STP.AntennasConfig antennas_config = 2;
      private com.impinj.stp.StpApi.AntennasConfig antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AntennasConfig, com.impinj.stp.StpApi.AntennasConfig.Builder, com.impinj.stp.StpApi.AntennasConfigOrBuilder> antennasConfigBuilder_;
      /**
       */
      public boolean hasAntennasConfig() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.AntennasConfig getAntennasConfig() {
        if (antennasConfigBuilder_ == null) {
          return antennasConfig_;
        } else {
          return antennasConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAntennasConfig(com.impinj.stp.StpApi.AntennasConfig value) {
        if (antennasConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          antennasConfig_ = value;
          onChanged();
        } else {
          antennasConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setAntennasConfig(
          com.impinj.stp.StpApi.AntennasConfig.Builder builderForValue) {
        if (antennasConfigBuilder_ == null) {
          antennasConfig_ = builderForValue.build();
          onChanged();
        } else {
          antennasConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeAntennasConfig(com.impinj.stp.StpApi.AntennasConfig value) {
        if (antennasConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              antennasConfig_ != com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance()) {
            antennasConfig_ =
              com.impinj.stp.StpApi.AntennasConfig.newBuilder(antennasConfig_).mergeFrom(value).buildPartial();
          } else {
            antennasConfig_ = value;
          }
          onChanged();
        } else {
          antennasConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearAntennasConfig() {
        if (antennasConfigBuilder_ == null) {
          antennasConfig_ = com.impinj.stp.StpApi.AntennasConfig.getDefaultInstance();
          onChanged();
        } else {
          antennasConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AntennasConfig.Builder getAntennasConfigBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getAntennasConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AntennasConfigOrBuilder getAntennasConfigOrBuilder() {
        if (antennasConfigBuilder_ != null) {
          return antennasConfigBuilder_.getMessageOrBuilder();
        } else {
          return antennasConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AntennasConfig, com.impinj.stp.StpApi.AntennasConfig.Builder, com.impinj.stp.StpApi.AntennasConfigOrBuilder> 
          getAntennasConfigFieldBuilder() {
        if (antennasConfigBuilder_ == null) {
          antennasConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AntennasConfig, com.impinj.stp.StpApi.AntennasConfig.Builder, com.impinj.stp.StpApi.AntennasConfigOrBuilder>(
                  antennasConfig_,
                  getParentForChildren(),
                  isClean());
          antennasConfig_ = null;
        }
        return antennasConfigBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetAntennaConfigResp)
    }

    static {
      defaultInstance = new GetAntennaConfigResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetAntennaConfigResp)
  }

  public interface EngageRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.EngageResp}
   *
   * See EngageCommand_.
   */
  public static final class EngageResp extends
      com.google.protobuf.GeneratedMessage
      implements EngageRespOrBuilder {
    // Use EngageResp.newBuilder() to construct.
    private EngageResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EngageResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EngageResp defaultInstance;
    public static EngageResp getDefaultInstance() {
      return defaultInstance;
    }

    public EngageResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EngageResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.EngageResp.class, com.impinj.stp.StpApi.EngageResp.Builder.class);
    }

    public static com.google.protobuf.Parser<EngageResp> PARSER =
        new com.google.protobuf.AbstractParser<EngageResp>() {
      public EngageResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EngageResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EngageResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.EngageResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.EngageResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.EngageResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.EngageResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.EngageResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.EngageResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.EngageResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.EngageResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.EngageResp}
     *
     * See EngageCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.EngageRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.EngageResp.class, com.impinj.stp.StpApi.EngageResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.EngageResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_EngageResp_descriptor;
      }

      public com.impinj.stp.StpApi.EngageResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.EngageResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.EngageResp build() {
        com.impinj.stp.StpApi.EngageResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.EngageResp buildPartial() {
        com.impinj.stp.StpApi.EngageResp result = new com.impinj.stp.StpApi.EngageResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.EngageResp) {
          return mergeFrom((com.impinj.stp.StpApi.EngageResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.EngageResp other) {
        if (other == com.impinj.stp.StpApi.EngageResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.EngageResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.EngageResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.EngageResp)
    }

    static {
      defaultInstance = new EngageResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.EngageResp)
  }

  public interface DisengageRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.DisengageResp}
   *
   * See DisengageCommand_.
   */
  public static final class DisengageResp extends
      com.google.protobuf.GeneratedMessage
      implements DisengageRespOrBuilder {
    // Use DisengageResp.newBuilder() to construct.
    private DisengageResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DisengageResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DisengageResp defaultInstance;
    public static DisengageResp getDefaultInstance() {
      return defaultInstance;
    }

    public DisengageResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DisengageResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.DisengageResp.class, com.impinj.stp.StpApi.DisengageResp.Builder.class);
    }

    public static com.google.protobuf.Parser<DisengageResp> PARSER =
        new com.google.protobuf.AbstractParser<DisengageResp>() {
      public DisengageResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DisengageResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DisengageResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.DisengageResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.DisengageResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.DisengageResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.DisengageResp}
     *
     * See DisengageCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.DisengageRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.DisengageResp.class, com.impinj.stp.StpApi.DisengageResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.DisengageResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_DisengageResp_descriptor;
      }

      public com.impinj.stp.StpApi.DisengageResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.DisengageResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.DisengageResp build() {
        com.impinj.stp.StpApi.DisengageResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.DisengageResp buildPartial() {
        com.impinj.stp.StpApi.DisengageResp result = new com.impinj.stp.StpApi.DisengageResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.DisengageResp) {
          return mergeFrom((com.impinj.stp.StpApi.DisengageResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.DisengageResp other) {
        if (other == com.impinj.stp.StpApi.DisengageResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.DisengageResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.DisengageResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.DisengageResp)
    }

    static {
      defaultInstance = new DisengageResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.DisengageResp)
  }

  public interface SetOperationResultGPORespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetOperationResultGPOResp}
   *
   * See SetOperationResultGPOCommand_.
   */
  public static final class SetOperationResultGPOResp extends
      com.google.protobuf.GeneratedMessage
      implements SetOperationResultGPORespOrBuilder {
    // Use SetOperationResultGPOResp.newBuilder() to construct.
    private SetOperationResultGPOResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetOperationResultGPOResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetOperationResultGPOResp defaultInstance;
    public static SetOperationResultGPOResp getDefaultInstance() {
      return defaultInstance;
    }

    public SetOperationResultGPOResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetOperationResultGPOResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetOperationResultGPOResp.class, com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder.class);
    }

    public static com.google.protobuf.Parser<SetOperationResultGPOResp> PARSER =
        new com.google.protobuf.AbstractParser<SetOperationResultGPOResp>() {
      public SetOperationResultGPOResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetOperationResultGPOResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetOperationResultGPOResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetOperationResultGPOResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetOperationResultGPOResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetOperationResultGPOResp}
     *
     * See SetOperationResultGPOCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetOperationResultGPORespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetOperationResultGPOResp.class, com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetOperationResultGPOResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetOperationResultGPOResp_descriptor;
      }

      public com.impinj.stp.StpApi.SetOperationResultGPOResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetOperationResultGPOResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetOperationResultGPOResp build() {
        com.impinj.stp.StpApi.SetOperationResultGPOResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetOperationResultGPOResp buildPartial() {
        com.impinj.stp.StpApi.SetOperationResultGPOResp result = new com.impinj.stp.StpApi.SetOperationResultGPOResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetOperationResultGPOResp) {
          return mergeFrom((com.impinj.stp.StpApi.SetOperationResultGPOResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetOperationResultGPOResp other) {
        if (other == com.impinj.stp.StpApi.SetOperationResultGPOResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetOperationResultGPOResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetOperationResultGPOResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetOperationResultGPOResp)
    }

    static {
      defaultInstance = new SetOperationResultGPOResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetOperationResultGPOResp)
  }

  public interface AddSerializationJobRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddSerializationJobResp}
   *
   * See AddSerializationJobCommand_.
   */
  public static final class AddSerializationJobResp extends
      com.google.protobuf.GeneratedMessage
      implements AddSerializationJobRespOrBuilder {
    // Use AddSerializationJobResp.newBuilder() to construct.
    private AddSerializationJobResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddSerializationJobResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddSerializationJobResp defaultInstance;
    public static AddSerializationJobResp getDefaultInstance() {
      return defaultInstance;
    }

    public AddSerializationJobResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddSerializationJobResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddSerializationJobResp.class, com.impinj.stp.StpApi.AddSerializationJobResp.Builder.class);
    }

    public static com.google.protobuf.Parser<AddSerializationJobResp> PARSER =
        new com.google.protobuf.AbstractParser<AddSerializationJobResp>() {
      public AddSerializationJobResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddSerializationJobResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddSerializationJobResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddSerializationJobResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddSerializationJobResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddSerializationJobResp}
     *
     * See AddSerializationJobCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddSerializationJobRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddSerializationJobResp.class, com.impinj.stp.StpApi.AddSerializationJobResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddSerializationJobResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddSerializationJobResp_descriptor;
      }

      public com.impinj.stp.StpApi.AddSerializationJobResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddSerializationJobResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddSerializationJobResp build() {
        com.impinj.stp.StpApi.AddSerializationJobResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddSerializationJobResp buildPartial() {
        com.impinj.stp.StpApi.AddSerializationJobResp result = new com.impinj.stp.StpApi.AddSerializationJobResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddSerializationJobResp) {
          return mergeFrom((com.impinj.stp.StpApi.AddSerializationJobResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddSerializationJobResp other) {
        if (other == com.impinj.stp.StpApi.AddSerializationJobResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddSerializationJobResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddSerializationJobResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddSerializationJobResp)
    }

    static {
      defaultInstance = new AddSerializationJobResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddSerializationJobResp)
  }

  public interface RemoveSerializationJobRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.RemoveSerializationJobResp}
   *
   * **NOT YET SUPPORTED**
   */
  public static final class RemoveSerializationJobResp extends
      com.google.protobuf.GeneratedMessage
      implements RemoveSerializationJobRespOrBuilder {
    // Use RemoveSerializationJobResp.newBuilder() to construct.
    private RemoveSerializationJobResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private RemoveSerializationJobResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final RemoveSerializationJobResp defaultInstance;
    public static RemoveSerializationJobResp getDefaultInstance() {
      return defaultInstance;
    }

    public RemoveSerializationJobResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private RemoveSerializationJobResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.RemoveSerializationJobResp.class, com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder.class);
    }

    public static com.google.protobuf.Parser<RemoveSerializationJobResp> PARSER =
        new com.google.protobuf.AbstractParser<RemoveSerializationJobResp>() {
      public RemoveSerializationJobResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RemoveSerializationJobResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<RemoveSerializationJobResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.RemoveSerializationJobResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.RemoveSerializationJobResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.RemoveSerializationJobResp}
     *
     * **NOT YET SUPPORTED**
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.RemoveSerializationJobRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.RemoveSerializationJobResp.class, com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.RemoveSerializationJobResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_RemoveSerializationJobResp_descriptor;
      }

      public com.impinj.stp.StpApi.RemoveSerializationJobResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.RemoveSerializationJobResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.RemoveSerializationJobResp build() {
        com.impinj.stp.StpApi.RemoveSerializationJobResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.RemoveSerializationJobResp buildPartial() {
        com.impinj.stp.StpApi.RemoveSerializationJobResp result = new com.impinj.stp.StpApi.RemoveSerializationJobResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.RemoveSerializationJobResp) {
          return mergeFrom((com.impinj.stp.StpApi.RemoveSerializationJobResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.RemoveSerializationJobResp other) {
        if (other == com.impinj.stp.StpApi.RemoveSerializationJobResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.RemoveSerializationJobResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.RemoveSerializationJobResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.RemoveSerializationJobResp)
    }

    static {
      defaultInstance = new RemoveSerializationJobResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.RemoveSerializationJobResp)
  }

  public interface SetInventoryJobRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetInventoryJobResp}
   */
  public static final class SetInventoryJobResp extends
      com.google.protobuf.GeneratedMessage
      implements SetInventoryJobRespOrBuilder {
    // Use SetInventoryJobResp.newBuilder() to construct.
    private SetInventoryJobResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetInventoryJobResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetInventoryJobResp defaultInstance;
    public static SetInventoryJobResp getDefaultInstance() {
      return defaultInstance;
    }

    public SetInventoryJobResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetInventoryJobResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetInventoryJobResp.class, com.impinj.stp.StpApi.SetInventoryJobResp.Builder.class);
    }

    public static com.google.protobuf.Parser<SetInventoryJobResp> PARSER =
        new com.google.protobuf.AbstractParser<SetInventoryJobResp>() {
      public SetInventoryJobResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetInventoryJobResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetInventoryJobResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetInventoryJobResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetInventoryJobResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetInventoryJobResp}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetInventoryJobRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetInventoryJobResp.class, com.impinj.stp.StpApi.SetInventoryJobResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetInventoryJobResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetInventoryJobResp_descriptor;
      }

      public com.impinj.stp.StpApi.SetInventoryJobResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetInventoryJobResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetInventoryJobResp build() {
        com.impinj.stp.StpApi.SetInventoryJobResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetInventoryJobResp buildPartial() {
        com.impinj.stp.StpApi.SetInventoryJobResp result = new com.impinj.stp.StpApi.SetInventoryJobResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetInventoryJobResp) {
          return mergeFrom((com.impinj.stp.StpApi.SetInventoryJobResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetInventoryJobResp other) {
        if (other == com.impinj.stp.StpApi.SetInventoryJobResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetInventoryJobResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetInventoryJobResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetInventoryJobResp)
    }

    static {
      defaultInstance = new SetInventoryJobResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetInventoryJobResp)
  }

  public interface SetCartonContentsJobRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.SetCartonContentsJobResp}
   */
  public static final class SetCartonContentsJobResp extends
      com.google.protobuf.GeneratedMessage
      implements SetCartonContentsJobRespOrBuilder {
    // Use SetCartonContentsJobResp.newBuilder() to construct.
    private SetCartonContentsJobResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SetCartonContentsJobResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SetCartonContentsJobResp defaultInstance;
    public static SetCartonContentsJobResp getDefaultInstance() {
      return defaultInstance;
    }

    public SetCartonContentsJobResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SetCartonContentsJobResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.SetCartonContentsJobResp.class, com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder.class);
    }

    public static com.google.protobuf.Parser<SetCartonContentsJobResp> PARSER =
        new com.google.protobuf.AbstractParser<SetCartonContentsJobResp>() {
      public SetCartonContentsJobResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetCartonContentsJobResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SetCartonContentsJobResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.SetCartonContentsJobResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.SetCartonContentsJobResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.SetCartonContentsJobResp}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.SetCartonContentsJobRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.SetCartonContentsJobResp.class, com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.SetCartonContentsJobResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_SetCartonContentsJobResp_descriptor;
      }

      public com.impinj.stp.StpApi.SetCartonContentsJobResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.SetCartonContentsJobResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.SetCartonContentsJobResp build() {
        com.impinj.stp.StpApi.SetCartonContentsJobResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.SetCartonContentsJobResp buildPartial() {
        com.impinj.stp.StpApi.SetCartonContentsJobResp result = new com.impinj.stp.StpApi.SetCartonContentsJobResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.SetCartonContentsJobResp) {
          return mergeFrom((com.impinj.stp.StpApi.SetCartonContentsJobResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.SetCartonContentsJobResp other) {
        if (other == com.impinj.stp.StpApi.SetCartonContentsJobResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.SetCartonContentsJobResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.SetCartonContentsJobResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.SetCartonContentsJobResp)
    }

    static {
      defaultInstance = new SetCartonContentsJobResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.SetCartonContentsJobResp)
  }

  public interface GetOperationDataRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();

    // optional .Impinj.STP.OperationData operation_data = 2;
    /**
     */
    boolean hasOperationData();
    /**
     */
    com.impinj.stp.StpApi.OperationData getOperationData();
    /**
     */
    com.impinj.stp.StpApi.OperationDataOrBuilder getOperationDataOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.GetOperationDataResp}
   */
  public static final class GetOperationDataResp extends
      com.google.protobuf.GeneratedMessage
      implements GetOperationDataRespOrBuilder {
    // Use GetOperationDataResp.newBuilder() to construct.
    private GetOperationDataResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetOperationDataResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetOperationDataResp defaultInstance;
    public static GetOperationDataResp getDefaultInstance() {
      return defaultInstance;
    }

    public GetOperationDataResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetOperationDataResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.OperationData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = operationData_.toBuilder();
              }
              operationData_ = input.readMessage(com.impinj.stp.StpApi.OperationData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(operationData_);
                operationData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.GetOperationDataResp.class, com.impinj.stp.StpApi.GetOperationDataResp.Builder.class);
    }

    public static com.google.protobuf.Parser<GetOperationDataResp> PARSER =
        new com.google.protobuf.AbstractParser<GetOperationDataResp>() {
      public GetOperationDataResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetOperationDataResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetOperationDataResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    // optional .Impinj.STP.OperationData operation_data = 2;
    public static final int OPERATION_DATA_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.OperationData operationData_;
    /**
     */
    public boolean hasOperationData() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationData getOperationData() {
      return operationData_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationDataOrBuilder getOperationDataOrBuilder() {
      return operationData_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      operationData_ = com.impinj.stp.StpApi.OperationData.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, operationData_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, operationData_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.GetOperationDataResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.GetOperationDataResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.GetOperationDataResp}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.GetOperationDataRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.GetOperationDataResp.class, com.impinj.stp.StpApi.GetOperationDataResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.GetOperationDataResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
          getOperationDataFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (operationDataBuilder_ == null) {
          operationData_ = com.impinj.stp.StpApi.OperationData.getDefaultInstance();
        } else {
          operationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_GetOperationDataResp_descriptor;
      }

      public com.impinj.stp.StpApi.GetOperationDataResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.GetOperationDataResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.GetOperationDataResp build() {
        com.impinj.stp.StpApi.GetOperationDataResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.GetOperationDataResp buildPartial() {
        com.impinj.stp.StpApi.GetOperationDataResp result = new com.impinj.stp.StpApi.GetOperationDataResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (operationDataBuilder_ == null) {
          result.operationData_ = operationData_;
        } else {
          result.operationData_ = operationDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.GetOperationDataResp) {
          return mergeFrom((com.impinj.stp.StpApi.GetOperationDataResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.GetOperationDataResp other) {
        if (other == com.impinj.stp.StpApi.GetOperationDataResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        if (other.hasOperationData()) {
          mergeOperationData(other.getOperationData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.GetOperationDataResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.GetOperationDataResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // optional .Impinj.STP.OperationData operation_data = 2;
      private com.impinj.stp.StpApi.OperationData operationData_ = com.impinj.stp.StpApi.OperationData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationData, com.impinj.stp.StpApi.OperationData.Builder, com.impinj.stp.StpApi.OperationDataOrBuilder> operationDataBuilder_;
      /**
       */
      public boolean hasOperationData() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationData getOperationData() {
        if (operationDataBuilder_ == null) {
          return operationData_;
        } else {
          return operationDataBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOperationData(com.impinj.stp.StpApi.OperationData value) {
        if (operationDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          operationData_ = value;
          onChanged();
        } else {
          operationDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setOperationData(
          com.impinj.stp.StpApi.OperationData.Builder builderForValue) {
        if (operationDataBuilder_ == null) {
          operationData_ = builderForValue.build();
          onChanged();
        } else {
          operationDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeOperationData(com.impinj.stp.StpApi.OperationData value) {
        if (operationDataBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              operationData_ != com.impinj.stp.StpApi.OperationData.getDefaultInstance()) {
            operationData_ =
              com.impinj.stp.StpApi.OperationData.newBuilder(operationData_).mergeFrom(value).buildPartial();
          } else {
            operationData_ = value;
          }
          onChanged();
        } else {
          operationDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearOperationData() {
        if (operationDataBuilder_ == null) {
          operationData_ = com.impinj.stp.StpApi.OperationData.getDefaultInstance();
          onChanged();
        } else {
          operationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationData.Builder getOperationDataBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getOperationDataFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationDataOrBuilder getOperationDataOrBuilder() {
        if (operationDataBuilder_ != null) {
          return operationDataBuilder_.getMessageOrBuilder();
        } else {
          return operationData_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationData, com.impinj.stp.StpApi.OperationData.Builder, com.impinj.stp.StpApi.OperationDataOrBuilder> 
          getOperationDataFieldBuilder() {
        if (operationDataBuilder_ == null) {
          operationDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OperationData, com.impinj.stp.StpApi.OperationData.Builder, com.impinj.stp.StpApi.OperationDataOrBuilder>(
                  operationData_,
                  getParentForChildren(),
                  isClean());
          operationData_ = null;
        }
        return operationDataBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.GetOperationDataResp)
    }

    static {
      defaultInstance = new GetOperationDataResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.GetOperationDataResp)
  }

  public interface AddLicenseKeyRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddLicenseKeyResp}
   */
  public static final class AddLicenseKeyResp extends
      com.google.protobuf.GeneratedMessage
      implements AddLicenseKeyRespOrBuilder {
    // Use AddLicenseKeyResp.newBuilder() to construct.
    private AddLicenseKeyResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddLicenseKeyResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddLicenseKeyResp defaultInstance;
    public static AddLicenseKeyResp getDefaultInstance() {
      return defaultInstance;
    }

    public AddLicenseKeyResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddLicenseKeyResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddLicenseKeyResp.class, com.impinj.stp.StpApi.AddLicenseKeyResp.Builder.class);
    }

    public static com.google.protobuf.Parser<AddLicenseKeyResp> PARSER =
        new com.google.protobuf.AbstractParser<AddLicenseKeyResp>() {
      public AddLicenseKeyResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddLicenseKeyResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddLicenseKeyResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddLicenseKeyResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddLicenseKeyResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddLicenseKeyResp}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddLicenseKeyRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddLicenseKeyResp.class, com.impinj.stp.StpApi.AddLicenseKeyResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddLicenseKeyResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddLicenseKeyResp_descriptor;
      }

      public com.impinj.stp.StpApi.AddLicenseKeyResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddLicenseKeyResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddLicenseKeyResp build() {
        com.impinj.stp.StpApi.AddLicenseKeyResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddLicenseKeyResp buildPartial() {
        com.impinj.stp.StpApi.AddLicenseKeyResp result = new com.impinj.stp.StpApi.AddLicenseKeyResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddLicenseKeyResp) {
          return mergeFrom((com.impinj.stp.StpApi.AddLicenseKeyResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddLicenseKeyResp other) {
        if (other == com.impinj.stp.StpApi.AddLicenseKeyResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddLicenseKeyResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddLicenseKeyResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddLicenseKeyResp)
    }

    static {
      defaultInstance = new AddLicenseKeyResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddLicenseKeyResp)
  }

  public interface AddTIDTableEntriesRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddTIDTableEntriesResp}
   *
   * Returns SUCCESS if the TID entry was added.  See
   * AddTIDTableEntriesCommand_.
   */
  public static final class AddTIDTableEntriesResp extends
      com.google.protobuf.GeneratedMessage
      implements AddTIDTableEntriesRespOrBuilder {
    // Use AddTIDTableEntriesResp.newBuilder() to construct.
    private AddTIDTableEntriesResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddTIDTableEntriesResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddTIDTableEntriesResp defaultInstance;
    public static AddTIDTableEntriesResp getDefaultInstance() {
      return defaultInstance;
    }

    public AddTIDTableEntriesResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddTIDTableEntriesResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddTIDTableEntriesResp.class, com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder.class);
    }

    public static com.google.protobuf.Parser<AddTIDTableEntriesResp> PARSER =
        new com.google.protobuf.AbstractParser<AddTIDTableEntriesResp>() {
      public AddTIDTableEntriesResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddTIDTableEntriesResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddTIDTableEntriesResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddTIDTableEntriesResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddTIDTableEntriesResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddTIDTableEntriesResp}
     *
     * Returns SUCCESS if the TID entry was added.  See
     * AddTIDTableEntriesCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddTIDTableEntriesRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddTIDTableEntriesResp.class, com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddTIDTableEntriesResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddTIDTableEntriesResp_descriptor;
      }

      public com.impinj.stp.StpApi.AddTIDTableEntriesResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddTIDTableEntriesResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddTIDTableEntriesResp build() {
        com.impinj.stp.StpApi.AddTIDTableEntriesResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddTIDTableEntriesResp buildPartial() {
        com.impinj.stp.StpApi.AddTIDTableEntriesResp result = new com.impinj.stp.StpApi.AddTIDTableEntriesResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddTIDTableEntriesResp) {
          return mergeFrom((com.impinj.stp.StpApi.AddTIDTableEntriesResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddTIDTableEntriesResp other) {
        if (other == com.impinj.stp.StpApi.AddTIDTableEntriesResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddTIDTableEntriesResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddTIDTableEntriesResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddTIDTableEntriesResp)
    }

    static {
      defaultInstance = new AddTIDTableEntriesResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddTIDTableEntriesResp)
  }

  public interface AddOrderedListEntriesRespOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Reply reply = 1;
    /**
     */
    boolean hasReply();
    /**
     */
    com.impinj.stp.StpApi.Reply getReply();
    /**
     */
    com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.AddOrderedListEntriesResp}
   *
   * Returns SUCCESS if the OrderedListEntries_ were added. See
   * AddOrderedListEntriesCommand_.
   */
  public static final class AddOrderedListEntriesResp extends
      com.google.protobuf.GeneratedMessage
      implements AddOrderedListEntriesRespOrBuilder {
    // Use AddOrderedListEntriesResp.newBuilder() to construct.
    private AddOrderedListEntriesResp(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddOrderedListEntriesResp(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AddOrderedListEntriesResp defaultInstance;
    public static AddOrderedListEntriesResp getDefaultInstance() {
      return defaultInstance;
    }

    public AddOrderedListEntriesResp getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddOrderedListEntriesResp(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.Reply.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = reply_.toBuilder();
              }
              reply_ = input.readMessage(com.impinj.stp.StpApi.Reply.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reply_);
                reply_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesResp_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesResp_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.AddOrderedListEntriesResp.class, com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder.class);
    }

    public static com.google.protobuf.Parser<AddOrderedListEntriesResp> PARSER =
        new com.google.protobuf.AbstractParser<AddOrderedListEntriesResp>() {
      public AddOrderedListEntriesResp parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AddOrderedListEntriesResp(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AddOrderedListEntriesResp> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Reply reply = 1;
    public static final int REPLY_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.Reply reply_;
    /**
     */
    public boolean hasReply() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.Reply getReply() {
      return reply_;
    }
    /**
     */
    public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
      return reply_;
    }

    private void initFields() {
      reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasReply()) {
        if (!getReply().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, reply_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, reply_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.AddOrderedListEntriesResp parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.AddOrderedListEntriesResp prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.AddOrderedListEntriesResp}
     *
     * Returns SUCCESS if the OrderedListEntries_ were added. See
     * AddOrderedListEntriesCommand_.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.AddOrderedListEntriesRespOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesResp_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesResp_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.AddOrderedListEntriesResp.class, com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.AddOrderedListEntriesResp.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReplyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_AddOrderedListEntriesResp_descriptor;
      }

      public com.impinj.stp.StpApi.AddOrderedListEntriesResp getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.AddOrderedListEntriesResp.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.AddOrderedListEntriesResp build() {
        com.impinj.stp.StpApi.AddOrderedListEntriesResp result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.AddOrderedListEntriesResp buildPartial() {
        com.impinj.stp.StpApi.AddOrderedListEntriesResp result = new com.impinj.stp.StpApi.AddOrderedListEntriesResp(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (replyBuilder_ == null) {
          result.reply_ = reply_;
        } else {
          result.reply_ = replyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.AddOrderedListEntriesResp) {
          return mergeFrom((com.impinj.stp.StpApi.AddOrderedListEntriesResp)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.AddOrderedListEntriesResp other) {
        if (other == com.impinj.stp.StpApi.AddOrderedListEntriesResp.getDefaultInstance()) return this;
        if (other.hasReply()) {
          mergeReply(other.getReply());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasReply()) {
          if (!getReply().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.AddOrderedListEntriesResp parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.AddOrderedListEntriesResp) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Reply reply = 1;
      private com.impinj.stp.StpApi.Reply reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> replyBuilder_;
      /**
       */
      public boolean hasReply() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply getReply() {
        if (replyBuilder_ == null) {
          return reply_;
        } else {
          return replyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reply_ = value;
          onChanged();
        } else {
          replyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setReply(
          com.impinj.stp.StpApi.Reply.Builder builderForValue) {
        if (replyBuilder_ == null) {
          reply_ = builderForValue.build();
          onChanged();
        } else {
          replyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeReply(com.impinj.stp.StpApi.Reply value) {
        if (replyBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              reply_ != com.impinj.stp.StpApi.Reply.getDefaultInstance()) {
            reply_ =
              com.impinj.stp.StpApi.Reply.newBuilder(reply_).mergeFrom(value).buildPartial();
          } else {
            reply_ = value;
          }
          onChanged();
        } else {
          replyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearReply() {
        if (replyBuilder_ == null) {
          reply_ = com.impinj.stp.StpApi.Reply.getDefaultInstance();
          onChanged();
        } else {
          replyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.Reply.Builder getReplyBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getReplyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.ReplyOrBuilder getReplyOrBuilder() {
        if (replyBuilder_ != null) {
          return replyBuilder_.getMessageOrBuilder();
        } else {
          return reply_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder> 
          getReplyFieldBuilder() {
        if (replyBuilder_ == null) {
          replyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Reply, com.impinj.stp.StpApi.Reply.Builder, com.impinj.stp.StpApi.ReplyOrBuilder>(
                  reply_,
                  getParentForChildren(),
                  isClean());
          reply_ = null;
        }
        return replyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.AddOrderedListEntriesResp)
    }

    static {
      defaultInstance = new AddOrderedListEntriesResp(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.AddOrderedListEntriesResp)
  }

  public interface CommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.ConnectCommand connect = 1;
    /**
     *
     * Connect to device.
     */
    boolean hasConnect();
    /**
     *
     * Connect to device.
     */
    com.impinj.stp.StpApi.ConnectCommand getConnect();
    /**
     *
     * Connect to device.
     */
    com.impinj.stp.StpApi.ConnectCommandOrBuilder getConnectOrBuilder();

    // optional .Impinj.STP.GetVersionsReaderCommand get_versions_reader = 2;
    /**
     *
     * Return all version information reported by the device and by
     * the host-side library.
     */
    boolean hasGetVersionsReader();
    /**
     *
     * Return all version information reported by the device and by
     * the host-side library.
     */
    com.impinj.stp.StpApi.GetVersionsReaderCommand getGetVersionsReader();
    /**
     *
     * Return all version information reported by the device and by
     * the host-side library.
     */
    com.impinj.stp.StpApi.GetVersionsReaderCommandOrBuilder getGetVersionsReaderOrBuilder();

    // optional .Impinj.STP.StartCommand start = 7;
    /**
     *
     * Start the encode or inventory run. The device must be
     * engaged with GPI or by calling engage before starting.
     */
    boolean hasStart();
    /**
     *
     * Start the encode or inventory run. The device must be
     * engaged with GPI or by calling engage before starting.
     */
    com.impinj.stp.StpApi.StartCommand getStart();
    /**
     *
     * Start the encode or inventory run. The device must be
     * engaged with GPI or by calling engage before starting.
     */
    com.impinj.stp.StpApi.StartCommandOrBuilder getStartOrBuilder();

    // optional .Impinj.STP.StopCommand stop = 8;
    /**
     *
     * Stop the encode or inventory run. The device must be
     * operating.
     */
    boolean hasStop();
    /**
     *
     * Stop the encode or inventory run. The device must be
     * operating.
     */
    com.impinj.stp.StpApi.StopCommand getStop();
    /**
     *
     * Stop the encode or inventory run. The device must be
     * operating.
     */
    com.impinj.stp.StpApi.StopCommandOrBuilder getStopOrBuilder();

    // optional .Impinj.STP.GetDeviceStateCommand get_device_state = 25;
    /**
     *
     * Get the state (operating, fault, etc.) of the device.
     * Contains a fault description, if any.
     */
    boolean hasGetDeviceState();
    /**
     *
     * Get the state (operating, fault, etc.) of the device.
     * Contains a fault description, if any.
     */
    com.impinj.stp.StpApi.GetDeviceStateCommand getGetDeviceState();
    /**
     *
     * Get the state (operating, fault, etc.) of the device.
     * Contains a fault description, if any.
     */
    com.impinj.stp.StpApi.GetDeviceStateCommandOrBuilder getGetDeviceStateOrBuilder();

    // optional .Impinj.STP.SetDeviceConfigCommand set_device_config = 12032;
    /**
     */
    boolean hasSetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.SetDeviceConfigCommand getSetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.SetDeviceConfigCommandOrBuilder getSetDeviceConfigOrBuilder();

    // optional .Impinj.STP.GetDeviceConfigCommand get_device_config = 12033;
    /**
     */
    boolean hasGetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.GetDeviceConfigCommand getGetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.GetDeviceConfigCommandOrBuilder getGetDeviceConfigOrBuilder();

    // optional .Impinj.STP.SetAntennaConfigCommand set_antenna_config = 12034;
    /**
     */
    boolean hasSetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.SetAntennaConfigCommand getSetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.SetAntennaConfigCommandOrBuilder getSetAntennaConfigOrBuilder();

    // optional .Impinj.STP.GetAntennaConfigCommand get_antenna_config = 12035;
    /**
     */
    boolean hasGetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.GetAntennaConfigCommand getGetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.GetAntennaConfigCommandOrBuilder getGetAntennaConfigOrBuilder();

    // optional .Impinj.STP.EngageCommand engage = 12036;
    /**
     */
    boolean hasEngage();
    /**
     */
    com.impinj.stp.StpApi.EngageCommand getEngage();
    /**
     */
    com.impinj.stp.StpApi.EngageCommandOrBuilder getEngageOrBuilder();

    // optional .Impinj.STP.DisengageCommand disengage = 12037;
    /**
     */
    boolean hasDisengage();
    /**
     */
    com.impinj.stp.StpApi.DisengageCommand getDisengage();
    /**
     */
    com.impinj.stp.StpApi.DisengageCommandOrBuilder getDisengageOrBuilder();

    // optional .Impinj.STP.SetOperationResultGPOCommand set_operation_result_gpo = 12038;
    /**
     *
     * When the GPOConfig enable_operation_result_gpo is set false,
     * this command lets the client application set the pass/fail
     * GPO based on its own pass/fail conditions.
     */
    boolean hasSetOperationResultGpo();
    /**
     *
     * When the GPOConfig enable_operation_result_gpo is set false,
     * this command lets the client application set the pass/fail
     * GPO based on its own pass/fail conditions.
     */
    com.impinj.stp.StpApi.SetOperationResultGPOCommand getSetOperationResultGpo();
    /**
     *
     * When the GPOConfig enable_operation_result_gpo is set false,
     * this command lets the client application set the pass/fail
     * GPO based on its own pass/fail conditions.
     */
    com.impinj.stp.StpApi.SetOperationResultGPOCommandOrBuilder getSetOperationResultGpoOrBuilder();

    // optional .Impinj.STP.AddSerializationJobCommand add_serialization_job = 12039;
    /**
     */
    boolean hasAddSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.AddSerializationJobCommand getAddSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.AddSerializationJobCommandOrBuilder getAddSerializationJobOrBuilder();

    // optional .Impinj.STP.RemoveSerializationJobCommand remove_serialization_job = 12040;
    /**
     */
    boolean hasRemoveSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.RemoveSerializationJobCommand getRemoveSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.RemoveSerializationJobCommandOrBuilder getRemoveSerializationJobOrBuilder();

    // optional .Impinj.STP.AddTIDTableEntriesCommand add_tid_table_entries = 12041;
    /**
     */
    boolean hasAddTidTableEntries();
    /**
     */
    com.impinj.stp.StpApi.AddTIDTableEntriesCommand getAddTidTableEntries();
    /**
     */
    com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder getAddTidTableEntriesOrBuilder();

    // optional .Impinj.STP.AddOrderedListEntriesCommand add_ordered_list_entries = 12042;
    /**
     */
    boolean hasAddOrderedListEntries();
    /**
     */
    com.impinj.stp.StpApi.AddOrderedListEntriesCommand getAddOrderedListEntries();
    /**
     */
    com.impinj.stp.StpApi.AddOrderedListEntriesCommandOrBuilder getAddOrderedListEntriesOrBuilder();

    // optional .Impinj.STP.SetInventoryJobCommand set_inventory_job = 12043;
    /**
     */
    boolean hasSetInventoryJob();
    /**
     */
    com.impinj.stp.StpApi.SetInventoryJobCommand getSetInventoryJob();
    /**
     */
    com.impinj.stp.StpApi.SetInventoryJobCommandOrBuilder getSetInventoryJobOrBuilder();

    // optional .Impinj.STP.SetCartonContentsJobCommand set_carton_contents_job = 12044;
    /**
     */
    boolean hasSetCartonContentsJob();
    /**
     */
    com.impinj.stp.StpApi.SetCartonContentsJobCommand getSetCartonContentsJob();
    /**
     */
    com.impinj.stp.StpApi.SetCartonContentsJobCommandOrBuilder getSetCartonContentsJobOrBuilder();

    // optional .Impinj.STP.GetOperationDataCommand get_operation_data = 12045;
    /**
     */
    boolean hasGetOperationData();
    /**
     */
    com.impinj.stp.StpApi.GetOperationDataCommand getGetOperationData();
    /**
     */
    com.impinj.stp.StpApi.GetOperationDataCommandOrBuilder getGetOperationDataOrBuilder();

    // optional .Impinj.STP.AddLicenseKeyCommand add_license_key = 12046;
    /**
     */
    boolean hasAddLicenseKey();
    /**
     */
    com.impinj.stp.StpApi.AddLicenseKeyCommand getAddLicenseKey();
    /**
     */
    com.impinj.stp.StpApi.AddLicenseKeyCommandOrBuilder getAddLicenseKeyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.Command}
   *
   * From Host to Impinj Device
   */
  public static final class Command extends
      com.google.protobuf.GeneratedMessage
      implements CommandOrBuilder {
    // Use Command.newBuilder() to construct.
    private Command(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Command(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Command defaultInstance;
    public static Command getDefaultInstance() {
      return defaultInstance;
    }

    public Command getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Command(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.ConnectCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = connect_.toBuilder();
              }
              connect_ = input.readMessage(com.impinj.stp.StpApi.ConnectCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(connect_);
                connect_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = getVersionsReader_.toBuilder();
              }
              getVersionsReader_ = input.readMessage(com.impinj.stp.StpApi.GetVersionsReaderCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getVersionsReader_);
                getVersionsReader_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 58: {
              com.impinj.stp.StpApi.StartCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = start_.toBuilder();
              }
              start_ = input.readMessage(com.impinj.stp.StpApi.StartCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(start_);
                start_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 66: {
              com.impinj.stp.StpApi.StopCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = stop_.toBuilder();
              }
              stop_ = input.readMessage(com.impinj.stp.StpApi.StopCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stop_);
                stop_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 202: {
              com.impinj.stp.StpApi.GetDeviceStateCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = getDeviceState_.toBuilder();
              }
              getDeviceState_ = input.readMessage(com.impinj.stp.StpApi.GetDeviceStateCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getDeviceState_);
                getDeviceState_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 96258: {
              com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = setDeviceConfig_.toBuilder();
              }
              setDeviceConfig_ = input.readMessage(com.impinj.stp.StpApi.SetDeviceConfigCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setDeviceConfig_);
                setDeviceConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 96266: {
              com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = getDeviceConfig_.toBuilder();
              }
              getDeviceConfig_ = input.readMessage(com.impinj.stp.StpApi.GetDeviceConfigCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getDeviceConfig_);
                getDeviceConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 96274: {
              com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = setAntennaConfig_.toBuilder();
              }
              setAntennaConfig_ = input.readMessage(com.impinj.stp.StpApi.SetAntennaConfigCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setAntennaConfig_);
                setAntennaConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 96282: {
              com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = getAntennaConfig_.toBuilder();
              }
              getAntennaConfig_ = input.readMessage(com.impinj.stp.StpApi.GetAntennaConfigCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getAntennaConfig_);
                getAntennaConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 96290: {
              com.impinj.stp.StpApi.EngageCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = engage_.toBuilder();
              }
              engage_ = input.readMessage(com.impinj.stp.StpApi.EngageCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(engage_);
                engage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 96298: {
              com.impinj.stp.StpApi.DisengageCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = disengage_.toBuilder();
              }
              disengage_ = input.readMessage(com.impinj.stp.StpApi.DisengageCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(disengage_);
                disengage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 96306: {
              com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) == 0x00000800)) {
                subBuilder = setOperationResultGpo_.toBuilder();
              }
              setOperationResultGpo_ = input.readMessage(com.impinj.stp.StpApi.SetOperationResultGPOCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setOperationResultGpo_);
                setOperationResultGpo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
            case 96314: {
              com.impinj.stp.StpApi.AddSerializationJobCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00001000) == 0x00001000)) {
                subBuilder = addSerializationJob_.toBuilder();
              }
              addSerializationJob_ = input.readMessage(com.impinj.stp.StpApi.AddSerializationJobCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addSerializationJob_);
                addSerializationJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00001000;
              break;
            }
            case 96322: {
              com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00002000) == 0x00002000)) {
                subBuilder = removeSerializationJob_.toBuilder();
              }
              removeSerializationJob_ = input.readMessage(com.impinj.stp.StpApi.RemoveSerializationJobCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(removeSerializationJob_);
                removeSerializationJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00002000;
              break;
            }
            case 96330: {
              com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00004000) == 0x00004000)) {
                subBuilder = addTidTableEntries_.toBuilder();
              }
              addTidTableEntries_ = input.readMessage(com.impinj.stp.StpApi.AddTIDTableEntriesCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addTidTableEntries_);
                addTidTableEntries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00004000;
              break;
            }
            case 96338: {
              com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00008000) == 0x00008000)) {
                subBuilder = addOrderedListEntries_.toBuilder();
              }
              addOrderedListEntries_ = input.readMessage(com.impinj.stp.StpApi.AddOrderedListEntriesCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addOrderedListEntries_);
                addOrderedListEntries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00008000;
              break;
            }
            case 96346: {
              com.impinj.stp.StpApi.SetInventoryJobCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00010000) == 0x00010000)) {
                subBuilder = setInventoryJob_.toBuilder();
              }
              setInventoryJob_ = input.readMessage(com.impinj.stp.StpApi.SetInventoryJobCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setInventoryJob_);
                setInventoryJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00010000;
              break;
            }
            case 96354: {
              com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00020000) == 0x00020000)) {
                subBuilder = setCartonContentsJob_.toBuilder();
              }
              setCartonContentsJob_ = input.readMessage(com.impinj.stp.StpApi.SetCartonContentsJobCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setCartonContentsJob_);
                setCartonContentsJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00020000;
              break;
            }
            case 96362: {
              com.impinj.stp.StpApi.GetOperationDataCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00040000) == 0x00040000)) {
                subBuilder = getOperationData_.toBuilder();
              }
              getOperationData_ = input.readMessage(com.impinj.stp.StpApi.GetOperationDataCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getOperationData_);
                getOperationData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00040000;
              break;
            }
            case 96370: {
              com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00080000) == 0x00080000)) {
                subBuilder = addLicenseKey_.toBuilder();
              }
              addLicenseKey_ = input.readMessage(com.impinj.stp.StpApi.AddLicenseKeyCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addLicenseKey_);
                addLicenseKey_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00080000;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Command_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Command_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Command.class, com.impinj.stp.StpApi.Command.Builder.class);
    }

    public static com.google.protobuf.Parser<Command> PARSER =
        new com.google.protobuf.AbstractParser<Command>() {
      public Command parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Command(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Command> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.ConnectCommand connect = 1;
    public static final int CONNECT_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.ConnectCommand connect_;
    /**
     *
     * Connect to device.
     */
    public boolean hasConnect() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * Connect to device.
     */
    public com.impinj.stp.StpApi.ConnectCommand getConnect() {
      return connect_;
    }
    /**
     *
     * Connect to device.
     */
    public com.impinj.stp.StpApi.ConnectCommandOrBuilder getConnectOrBuilder() {
      return connect_;
    }

    // optional .Impinj.STP.GetVersionsReaderCommand get_versions_reader = 2;
    public static final int GET_VERSIONS_READER_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.GetVersionsReaderCommand getVersionsReader_;
    /**
     *
     * Return all version information reported by the device and by
     * the host-side library.
     */
    public boolean hasGetVersionsReader() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * Return all version information reported by the device and by
     * the host-side library.
     */
    public com.impinj.stp.StpApi.GetVersionsReaderCommand getGetVersionsReader() {
      return getVersionsReader_;
    }
    /**
     *
     * Return all version information reported by the device and by
     * the host-side library.
     */
    public com.impinj.stp.StpApi.GetVersionsReaderCommandOrBuilder getGetVersionsReaderOrBuilder() {
      return getVersionsReader_;
    }

    // optional .Impinj.STP.StartCommand start = 7;
    public static final int START_FIELD_NUMBER = 7;
    private com.impinj.stp.StpApi.StartCommand start_;
    /**
     *
     * Start the encode or inventory run. The device must be
     * engaged with GPI or by calling engage before starting.
     */
    public boolean hasStart() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Start the encode or inventory run. The device must be
     * engaged with GPI or by calling engage before starting.
     */
    public com.impinj.stp.StpApi.StartCommand getStart() {
      return start_;
    }
    /**
     *
     * Start the encode or inventory run. The device must be
     * engaged with GPI or by calling engage before starting.
     */
    public com.impinj.stp.StpApi.StartCommandOrBuilder getStartOrBuilder() {
      return start_;
    }

    // optional .Impinj.STP.StopCommand stop = 8;
    public static final int STOP_FIELD_NUMBER = 8;
    private com.impinj.stp.StpApi.StopCommand stop_;
    /**
     *
     * Stop the encode or inventory run. The device must be
     * operating.
     */
    public boolean hasStop() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Stop the encode or inventory run. The device must be
     * operating.
     */
    public com.impinj.stp.StpApi.StopCommand getStop() {
      return stop_;
    }
    /**
     *
     * Stop the encode or inventory run. The device must be
     * operating.
     */
    public com.impinj.stp.StpApi.StopCommandOrBuilder getStopOrBuilder() {
      return stop_;
    }

    // optional .Impinj.STP.GetDeviceStateCommand get_device_state = 25;
    public static final int GET_DEVICE_STATE_FIELD_NUMBER = 25;
    private com.impinj.stp.StpApi.GetDeviceStateCommand getDeviceState_;
    /**
     *
     * Get the state (operating, fault, etc.) of the device.
     * Contains a fault description, if any.
     */
    public boolean hasGetDeviceState() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     *
     * Get the state (operating, fault, etc.) of the device.
     * Contains a fault description, if any.
     */
    public com.impinj.stp.StpApi.GetDeviceStateCommand getGetDeviceState() {
      return getDeviceState_;
    }
    /**
     *
     * Get the state (operating, fault, etc.) of the device.
     * Contains a fault description, if any.
     */
    public com.impinj.stp.StpApi.GetDeviceStateCommandOrBuilder getGetDeviceStateOrBuilder() {
      return getDeviceState_;
    }

    // optional .Impinj.STP.SetDeviceConfigCommand set_device_config = 12032;
    public static final int SET_DEVICE_CONFIG_FIELD_NUMBER = 12032;
    private com.impinj.stp.StpApi.SetDeviceConfigCommand setDeviceConfig_;
    /**
     */
    public boolean hasSetDeviceConfig() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetDeviceConfigCommand getSetDeviceConfig() {
      return setDeviceConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetDeviceConfigCommandOrBuilder getSetDeviceConfigOrBuilder() {
      return setDeviceConfig_;
    }

    // optional .Impinj.STP.GetDeviceConfigCommand get_device_config = 12033;
    public static final int GET_DEVICE_CONFIG_FIELD_NUMBER = 12033;
    private com.impinj.stp.StpApi.GetDeviceConfigCommand getDeviceConfig_;
    /**
     */
    public boolean hasGetDeviceConfig() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetDeviceConfigCommand getGetDeviceConfig() {
      return getDeviceConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetDeviceConfigCommandOrBuilder getGetDeviceConfigOrBuilder() {
      return getDeviceConfig_;
    }

    // optional .Impinj.STP.SetAntennaConfigCommand set_antenna_config = 12034;
    public static final int SET_ANTENNA_CONFIG_FIELD_NUMBER = 12034;
    private com.impinj.stp.StpApi.SetAntennaConfigCommand setAntennaConfig_;
    /**
     */
    public boolean hasSetAntennaConfig() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetAntennaConfigCommand getSetAntennaConfig() {
      return setAntennaConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetAntennaConfigCommandOrBuilder getSetAntennaConfigOrBuilder() {
      return setAntennaConfig_;
    }

    // optional .Impinj.STP.GetAntennaConfigCommand get_antenna_config = 12035;
    public static final int GET_ANTENNA_CONFIG_FIELD_NUMBER = 12035;
    private com.impinj.stp.StpApi.GetAntennaConfigCommand getAntennaConfig_;
    /**
     */
    public boolean hasGetAntennaConfig() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetAntennaConfigCommand getGetAntennaConfig() {
      return getAntennaConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetAntennaConfigCommandOrBuilder getGetAntennaConfigOrBuilder() {
      return getAntennaConfig_;
    }

    // optional .Impinj.STP.EngageCommand engage = 12036;
    public static final int ENGAGE_FIELD_NUMBER = 12036;
    private com.impinj.stp.StpApi.EngageCommand engage_;
    /**
     */
    public boolean hasEngage() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     */
    public com.impinj.stp.StpApi.EngageCommand getEngage() {
      return engage_;
    }
    /**
     */
    public com.impinj.stp.StpApi.EngageCommandOrBuilder getEngageOrBuilder() {
      return engage_;
    }

    // optional .Impinj.STP.DisengageCommand disengage = 12037;
    public static final int DISENGAGE_FIELD_NUMBER = 12037;
    private com.impinj.stp.StpApi.DisengageCommand disengage_;
    /**
     */
    public boolean hasDisengage() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     */
    public com.impinj.stp.StpApi.DisengageCommand getDisengage() {
      return disengage_;
    }
    /**
     */
    public com.impinj.stp.StpApi.DisengageCommandOrBuilder getDisengageOrBuilder() {
      return disengage_;
    }

    // optional .Impinj.STP.SetOperationResultGPOCommand set_operation_result_gpo = 12038;
    public static final int SET_OPERATION_RESULT_GPO_FIELD_NUMBER = 12038;
    private com.impinj.stp.StpApi.SetOperationResultGPOCommand setOperationResultGpo_;
    /**
     *
     * When the GPOConfig enable_operation_result_gpo is set false,
     * this command lets the client application set the pass/fail
     * GPO based on its own pass/fail conditions.
     */
    public boolean hasSetOperationResultGpo() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     *
     * When the GPOConfig enable_operation_result_gpo is set false,
     * this command lets the client application set the pass/fail
     * GPO based on its own pass/fail conditions.
     */
    public com.impinj.stp.StpApi.SetOperationResultGPOCommand getSetOperationResultGpo() {
      return setOperationResultGpo_;
    }
    /**
     *
     * When the GPOConfig enable_operation_result_gpo is set false,
     * this command lets the client application set the pass/fail
     * GPO based on its own pass/fail conditions.
     */
    public com.impinj.stp.StpApi.SetOperationResultGPOCommandOrBuilder getSetOperationResultGpoOrBuilder() {
      return setOperationResultGpo_;
    }

    // optional .Impinj.STP.AddSerializationJobCommand add_serialization_job = 12039;
    public static final int ADD_SERIALIZATION_JOB_FIELD_NUMBER = 12039;
    private com.impinj.stp.StpApi.AddSerializationJobCommand addSerializationJob_;
    /**
     */
    public boolean hasAddSerializationJob() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddSerializationJobCommand getAddSerializationJob() {
      return addSerializationJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddSerializationJobCommandOrBuilder getAddSerializationJobOrBuilder() {
      return addSerializationJob_;
    }

    // optional .Impinj.STP.RemoveSerializationJobCommand remove_serialization_job = 12040;
    public static final int REMOVE_SERIALIZATION_JOB_FIELD_NUMBER = 12040;
    private com.impinj.stp.StpApi.RemoveSerializationJobCommand removeSerializationJob_;
    /**
     */
    public boolean hasRemoveSerializationJob() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     */
    public com.impinj.stp.StpApi.RemoveSerializationJobCommand getRemoveSerializationJob() {
      return removeSerializationJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.RemoveSerializationJobCommandOrBuilder getRemoveSerializationJobOrBuilder() {
      return removeSerializationJob_;
    }

    // optional .Impinj.STP.AddTIDTableEntriesCommand add_tid_table_entries = 12041;
    public static final int ADD_TID_TABLE_ENTRIES_FIELD_NUMBER = 12041;
    private com.impinj.stp.StpApi.AddTIDTableEntriesCommand addTidTableEntries_;
    /**
     */
    public boolean hasAddTidTableEntries() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddTIDTableEntriesCommand getAddTidTableEntries() {
      return addTidTableEntries_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder getAddTidTableEntriesOrBuilder() {
      return addTidTableEntries_;
    }

    // optional .Impinj.STP.AddOrderedListEntriesCommand add_ordered_list_entries = 12042;
    public static final int ADD_ORDERED_LIST_ENTRIES_FIELD_NUMBER = 12042;
    private com.impinj.stp.StpApi.AddOrderedListEntriesCommand addOrderedListEntries_;
    /**
     */
    public boolean hasAddOrderedListEntries() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddOrderedListEntriesCommand getAddOrderedListEntries() {
      return addOrderedListEntries_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddOrderedListEntriesCommandOrBuilder getAddOrderedListEntriesOrBuilder() {
      return addOrderedListEntries_;
    }

    // optional .Impinj.STP.SetInventoryJobCommand set_inventory_job = 12043;
    public static final int SET_INVENTORY_JOB_FIELD_NUMBER = 12043;
    private com.impinj.stp.StpApi.SetInventoryJobCommand setInventoryJob_;
    /**
     */
    public boolean hasSetInventoryJob() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetInventoryJobCommand getSetInventoryJob() {
      return setInventoryJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetInventoryJobCommandOrBuilder getSetInventoryJobOrBuilder() {
      return setInventoryJob_;
    }

    // optional .Impinj.STP.SetCartonContentsJobCommand set_carton_contents_job = 12044;
    public static final int SET_CARTON_CONTENTS_JOB_FIELD_NUMBER = 12044;
    private com.impinj.stp.StpApi.SetCartonContentsJobCommand setCartonContentsJob_;
    /**
     */
    public boolean hasSetCartonContentsJob() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetCartonContentsJobCommand getSetCartonContentsJob() {
      return setCartonContentsJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetCartonContentsJobCommandOrBuilder getSetCartonContentsJobOrBuilder() {
      return setCartonContentsJob_;
    }

    // optional .Impinj.STP.GetOperationDataCommand get_operation_data = 12045;
    public static final int GET_OPERATION_DATA_FIELD_NUMBER = 12045;
    private com.impinj.stp.StpApi.GetOperationDataCommand getOperationData_;
    /**
     */
    public boolean hasGetOperationData() {
      return ((bitField0_ & 0x00040000) == 0x00040000);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetOperationDataCommand getGetOperationData() {
      return getOperationData_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetOperationDataCommandOrBuilder getGetOperationDataOrBuilder() {
      return getOperationData_;
    }

    // optional .Impinj.STP.AddLicenseKeyCommand add_license_key = 12046;
    public static final int ADD_LICENSE_KEY_FIELD_NUMBER = 12046;
    private com.impinj.stp.StpApi.AddLicenseKeyCommand addLicenseKey_;
    /**
     */
    public boolean hasAddLicenseKey() {
      return ((bitField0_ & 0x00080000) == 0x00080000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddLicenseKeyCommand getAddLicenseKey() {
      return addLicenseKey_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddLicenseKeyCommandOrBuilder getAddLicenseKeyOrBuilder() {
      return addLicenseKey_;
    }

    private void initFields() {
      connect_ = com.impinj.stp.StpApi.ConnectCommand.getDefaultInstance();
      getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderCommand.getDefaultInstance();
      start_ = com.impinj.stp.StpApi.StartCommand.getDefaultInstance();
      stop_ = com.impinj.stp.StpApi.StopCommand.getDefaultInstance();
      getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateCommand.getDefaultInstance();
      setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigCommand.getDefaultInstance();
      getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigCommand.getDefaultInstance();
      setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigCommand.getDefaultInstance();
      getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigCommand.getDefaultInstance();
      engage_ = com.impinj.stp.StpApi.EngageCommand.getDefaultInstance();
      disengage_ = com.impinj.stp.StpApi.DisengageCommand.getDefaultInstance();
      setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOCommand.getDefaultInstance();
      addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobCommand.getDefaultInstance();
      removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobCommand.getDefaultInstance();
      addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
      addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesCommand.getDefaultInstance();
      setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobCommand.getDefaultInstance();
      setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobCommand.getDefaultInstance();
      getOperationData_ = com.impinj.stp.StpApi.GetOperationDataCommand.getDefaultInstance();
      addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyCommand.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasConnect()) {
        if (!getConnect().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSetDeviceConfig()) {
        if (!getSetDeviceConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSetAntennaConfig()) {
        if (!getSetAntennaConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddSerializationJob()) {
        if (!getAddSerializationJob().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddTidTableEntries()) {
        if (!getAddTidTableEntries().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddOrderedListEntries()) {
        if (!getAddOrderedListEntries().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddLicenseKey()) {
        if (!getAddLicenseKey().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, connect_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getVersionsReader_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(7, start_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(8, stop_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(25, getDeviceState_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(12032, setDeviceConfig_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(12033, getDeviceConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(12034, setAntennaConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(12035, getAntennaConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(12036, engage_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(12037, disengage_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeMessage(12038, setOperationResultGpo_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeMessage(12039, addSerializationJob_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeMessage(12040, removeSerializationJob_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeMessage(12041, addTidTableEntries_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeMessage(12042, addOrderedListEntries_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeMessage(12043, setInventoryJob_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeMessage(12044, setCartonContentsJob_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeMessage(12045, getOperationData_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeMessage(12046, addLicenseKey_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, connect_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getVersionsReader_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, start_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, stop_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(25, getDeviceState_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12032, setDeviceConfig_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12033, getDeviceConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12034, setAntennaConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12035, getAntennaConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12036, engage_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12037, disengage_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12038, setOperationResultGpo_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12039, addSerializationJob_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12040, removeSerializationJob_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12041, addTidTableEntries_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12042, addOrderedListEntries_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12043, setInventoryJob_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12044, setCartonContentsJob_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12045, getOperationData_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12046, addLicenseKey_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Command parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Command parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Command parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Command parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Command parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Command parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Command parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Command parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Command parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Command parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Command prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Command}
     *
     * From Host to Impinj Device
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.CommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Command_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Command_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Command.class, com.impinj.stp.StpApi.Command.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Command.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getConnectFieldBuilder();
          getGetVersionsReaderFieldBuilder();
          getStartFieldBuilder();
          getStopFieldBuilder();
          getGetDeviceStateFieldBuilder();
          getSetDeviceConfigFieldBuilder();
          getGetDeviceConfigFieldBuilder();
          getSetAntennaConfigFieldBuilder();
          getGetAntennaConfigFieldBuilder();
          getEngageFieldBuilder();
          getDisengageFieldBuilder();
          getSetOperationResultGpoFieldBuilder();
          getAddSerializationJobFieldBuilder();
          getRemoveSerializationJobFieldBuilder();
          getAddTidTableEntriesFieldBuilder();
          getAddOrderedListEntriesFieldBuilder();
          getSetInventoryJobFieldBuilder();
          getSetCartonContentsJobFieldBuilder();
          getGetOperationDataFieldBuilder();
          getAddLicenseKeyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (connectBuilder_ == null) {
          connect_ = com.impinj.stp.StpApi.ConnectCommand.getDefaultInstance();
        } else {
          connectBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderCommand.getDefaultInstance();
        } else {
          getVersionsReaderBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (startBuilder_ == null) {
          start_ = com.impinj.stp.StpApi.StartCommand.getDefaultInstance();
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (stopBuilder_ == null) {
          stop_ = com.impinj.stp.StpApi.StopCommand.getDefaultInstance();
        } else {
          stopBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (getDeviceStateBuilder_ == null) {
          getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateCommand.getDefaultInstance();
        } else {
          getDeviceStateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigCommand.getDefaultInstance();
        } else {
          setDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigCommand.getDefaultInstance();
        } else {
          getDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigCommand.getDefaultInstance();
        } else {
          setAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigCommand.getDefaultInstance();
        } else {
          getAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (engageBuilder_ == null) {
          engage_ = com.impinj.stp.StpApi.EngageCommand.getDefaultInstance();
        } else {
          engageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (disengageBuilder_ == null) {
          disengage_ = com.impinj.stp.StpApi.DisengageCommand.getDefaultInstance();
        } else {
          disengageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOCommand.getDefaultInstance();
        } else {
          setOperationResultGpoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        if (addSerializationJobBuilder_ == null) {
          addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobCommand.getDefaultInstance();
        } else {
          addSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobCommand.getDefaultInstance();
        } else {
          removeSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
        } else {
          addTidTableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesCommand.getDefaultInstance();
        } else {
          addOrderedListEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        if (setInventoryJobBuilder_ == null) {
          setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobCommand.getDefaultInstance();
        } else {
          setInventoryJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobCommand.getDefaultInstance();
        } else {
          setCartonContentsJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        if (getOperationDataBuilder_ == null) {
          getOperationData_ = com.impinj.stp.StpApi.GetOperationDataCommand.getDefaultInstance();
        } else {
          getOperationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00040000);
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyCommand.getDefaultInstance();
        } else {
          addLicenseKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Command_descriptor;
      }

      public com.impinj.stp.StpApi.Command getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Command.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Command build() {
        com.impinj.stp.StpApi.Command result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Command buildPartial() {
        com.impinj.stp.StpApi.Command result = new com.impinj.stp.StpApi.Command(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (connectBuilder_ == null) {
          result.connect_ = connect_;
        } else {
          result.connect_ = connectBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (getVersionsReaderBuilder_ == null) {
          result.getVersionsReader_ = getVersionsReader_;
        } else {
          result.getVersionsReader_ = getVersionsReaderBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (startBuilder_ == null) {
          result.start_ = start_;
        } else {
          result.start_ = startBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (stopBuilder_ == null) {
          result.stop_ = stop_;
        } else {
          result.stop_ = stopBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (getDeviceStateBuilder_ == null) {
          result.getDeviceState_ = getDeviceState_;
        } else {
          result.getDeviceState_ = getDeviceStateBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (setDeviceConfigBuilder_ == null) {
          result.setDeviceConfig_ = setDeviceConfig_;
        } else {
          result.setDeviceConfig_ = setDeviceConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (getDeviceConfigBuilder_ == null) {
          result.getDeviceConfig_ = getDeviceConfig_;
        } else {
          result.getDeviceConfig_ = getDeviceConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (setAntennaConfigBuilder_ == null) {
          result.setAntennaConfig_ = setAntennaConfig_;
        } else {
          result.setAntennaConfig_ = setAntennaConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (getAntennaConfigBuilder_ == null) {
          result.getAntennaConfig_ = getAntennaConfig_;
        } else {
          result.getAntennaConfig_ = getAntennaConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (engageBuilder_ == null) {
          result.engage_ = engage_;
        } else {
          result.engage_ = engageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (disengageBuilder_ == null) {
          result.disengage_ = disengage_;
        } else {
          result.disengage_ = disengageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        if (setOperationResultGpoBuilder_ == null) {
          result.setOperationResultGpo_ = setOperationResultGpo_;
        } else {
          result.setOperationResultGpo_ = setOperationResultGpoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        if (addSerializationJobBuilder_ == null) {
          result.addSerializationJob_ = addSerializationJob_;
        } else {
          result.addSerializationJob_ = addSerializationJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        if (removeSerializationJobBuilder_ == null) {
          result.removeSerializationJob_ = removeSerializationJob_;
        } else {
          result.removeSerializationJob_ = removeSerializationJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        if (addTidTableEntriesBuilder_ == null) {
          result.addTidTableEntries_ = addTidTableEntries_;
        } else {
          result.addTidTableEntries_ = addTidTableEntriesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        if (addOrderedListEntriesBuilder_ == null) {
          result.addOrderedListEntries_ = addOrderedListEntries_;
        } else {
          result.addOrderedListEntries_ = addOrderedListEntriesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        if (setInventoryJobBuilder_ == null) {
          result.setInventoryJob_ = setInventoryJob_;
        } else {
          result.setInventoryJob_ = setInventoryJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00020000;
        }
        if (setCartonContentsJobBuilder_ == null) {
          result.setCartonContentsJob_ = setCartonContentsJob_;
        } else {
          result.setCartonContentsJob_ = setCartonContentsJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
          to_bitField0_ |= 0x00040000;
        }
        if (getOperationDataBuilder_ == null) {
          result.getOperationData_ = getOperationData_;
        } else {
          result.getOperationData_ = getOperationDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00080000;
        }
        if (addLicenseKeyBuilder_ == null) {
          result.addLicenseKey_ = addLicenseKey_;
        } else {
          result.addLicenseKey_ = addLicenseKeyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Command) {
          return mergeFrom((com.impinj.stp.StpApi.Command)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Command other) {
        if (other == com.impinj.stp.StpApi.Command.getDefaultInstance()) return this;
        if (other.hasConnect()) {
          mergeConnect(other.getConnect());
        }
        if (other.hasGetVersionsReader()) {
          mergeGetVersionsReader(other.getGetVersionsReader());
        }
        if (other.hasStart()) {
          mergeStart(other.getStart());
        }
        if (other.hasStop()) {
          mergeStop(other.getStop());
        }
        if (other.hasGetDeviceState()) {
          mergeGetDeviceState(other.getGetDeviceState());
        }
        if (other.hasSetDeviceConfig()) {
          mergeSetDeviceConfig(other.getSetDeviceConfig());
        }
        if (other.hasGetDeviceConfig()) {
          mergeGetDeviceConfig(other.getGetDeviceConfig());
        }
        if (other.hasSetAntennaConfig()) {
          mergeSetAntennaConfig(other.getSetAntennaConfig());
        }
        if (other.hasGetAntennaConfig()) {
          mergeGetAntennaConfig(other.getGetAntennaConfig());
        }
        if (other.hasEngage()) {
          mergeEngage(other.getEngage());
        }
        if (other.hasDisengage()) {
          mergeDisengage(other.getDisengage());
        }
        if (other.hasSetOperationResultGpo()) {
          mergeSetOperationResultGpo(other.getSetOperationResultGpo());
        }
        if (other.hasAddSerializationJob()) {
          mergeAddSerializationJob(other.getAddSerializationJob());
        }
        if (other.hasRemoveSerializationJob()) {
          mergeRemoveSerializationJob(other.getRemoveSerializationJob());
        }
        if (other.hasAddTidTableEntries()) {
          mergeAddTidTableEntries(other.getAddTidTableEntries());
        }
        if (other.hasAddOrderedListEntries()) {
          mergeAddOrderedListEntries(other.getAddOrderedListEntries());
        }
        if (other.hasSetInventoryJob()) {
          mergeSetInventoryJob(other.getSetInventoryJob());
        }
        if (other.hasSetCartonContentsJob()) {
          mergeSetCartonContentsJob(other.getSetCartonContentsJob());
        }
        if (other.hasGetOperationData()) {
          mergeGetOperationData(other.getGetOperationData());
        }
        if (other.hasAddLicenseKey()) {
          mergeAddLicenseKey(other.getAddLicenseKey());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasConnect()) {
          if (!getConnect().isInitialized()) {
            
            return false;
          }
        }
        if (hasSetDeviceConfig()) {
          if (!getSetDeviceConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasSetAntennaConfig()) {
          if (!getSetAntennaConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddSerializationJob()) {
          if (!getAddSerializationJob().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddTidTableEntries()) {
          if (!getAddTidTableEntries().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddOrderedListEntries()) {
          if (!getAddOrderedListEntries().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddLicenseKey()) {
          if (!getAddLicenseKey().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Command parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Command) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.ConnectCommand connect = 1;
      private com.impinj.stp.StpApi.ConnectCommand connect_ = com.impinj.stp.StpApi.ConnectCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.ConnectCommand, com.impinj.stp.StpApi.ConnectCommand.Builder, com.impinj.stp.StpApi.ConnectCommandOrBuilder> connectBuilder_;
      /**
       *
       * Connect to device.
       */
      public boolean hasConnect() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * Connect to device.
       */
      public com.impinj.stp.StpApi.ConnectCommand getConnect() {
        if (connectBuilder_ == null) {
          return connect_;
        } else {
          return connectBuilder_.getMessage();
        }
      }
      /**
       *
       * Connect to device.
       */
      public Builder setConnect(com.impinj.stp.StpApi.ConnectCommand value) {
        if (connectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          connect_ = value;
          onChanged();
        } else {
          connectBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * Connect to device.
       */
      public Builder setConnect(
          com.impinj.stp.StpApi.ConnectCommand.Builder builderForValue) {
        if (connectBuilder_ == null) {
          connect_ = builderForValue.build();
          onChanged();
        } else {
          connectBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * Connect to device.
       */
      public Builder mergeConnect(com.impinj.stp.StpApi.ConnectCommand value) {
        if (connectBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              connect_ != com.impinj.stp.StpApi.ConnectCommand.getDefaultInstance()) {
            connect_ =
              com.impinj.stp.StpApi.ConnectCommand.newBuilder(connect_).mergeFrom(value).buildPartial();
          } else {
            connect_ = value;
          }
          onChanged();
        } else {
          connectBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * Connect to device.
       */
      public Builder clearConnect() {
        if (connectBuilder_ == null) {
          connect_ = com.impinj.stp.StpApi.ConnectCommand.getDefaultInstance();
          onChanged();
        } else {
          connectBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       *
       * Connect to device.
       */
      public com.impinj.stp.StpApi.ConnectCommand.Builder getConnectBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getConnectFieldBuilder().getBuilder();
      }
      /**
       *
       * Connect to device.
       */
      public com.impinj.stp.StpApi.ConnectCommandOrBuilder getConnectOrBuilder() {
        if (connectBuilder_ != null) {
          return connectBuilder_.getMessageOrBuilder();
        } else {
          return connect_;
        }
      }
      /**
       *
       * Connect to device.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.ConnectCommand, com.impinj.stp.StpApi.ConnectCommand.Builder, com.impinj.stp.StpApi.ConnectCommandOrBuilder> 
          getConnectFieldBuilder() {
        if (connectBuilder_ == null) {
          connectBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.ConnectCommand, com.impinj.stp.StpApi.ConnectCommand.Builder, com.impinj.stp.StpApi.ConnectCommandOrBuilder>(
                  connect_,
                  getParentForChildren(),
                  isClean());
          connect_ = null;
        }
        return connectBuilder_;
      }

      // optional .Impinj.STP.GetVersionsReaderCommand get_versions_reader = 2;
      private com.impinj.stp.StpApi.GetVersionsReaderCommand getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetVersionsReaderCommand, com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder, com.impinj.stp.StpApi.GetVersionsReaderCommandOrBuilder> getVersionsReaderBuilder_;
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public boolean hasGetVersionsReader() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public com.impinj.stp.StpApi.GetVersionsReaderCommand getGetVersionsReader() {
        if (getVersionsReaderBuilder_ == null) {
          return getVersionsReader_;
        } else {
          return getVersionsReaderBuilder_.getMessage();
        }
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public Builder setGetVersionsReader(com.impinj.stp.StpApi.GetVersionsReaderCommand value) {
        if (getVersionsReaderBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getVersionsReader_ = value;
          onChanged();
        } else {
          getVersionsReaderBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public Builder setGetVersionsReader(
          com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder builderForValue) {
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReader_ = builderForValue.build();
          onChanged();
        } else {
          getVersionsReaderBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public Builder mergeGetVersionsReader(com.impinj.stp.StpApi.GetVersionsReaderCommand value) {
        if (getVersionsReaderBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              getVersionsReader_ != com.impinj.stp.StpApi.GetVersionsReaderCommand.getDefaultInstance()) {
            getVersionsReader_ =
              com.impinj.stp.StpApi.GetVersionsReaderCommand.newBuilder(getVersionsReader_).mergeFrom(value).buildPartial();
          } else {
            getVersionsReader_ = value;
          }
          onChanged();
        } else {
          getVersionsReaderBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public Builder clearGetVersionsReader() {
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderCommand.getDefaultInstance();
          onChanged();
        } else {
          getVersionsReaderBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder getGetVersionsReaderBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getGetVersionsReaderFieldBuilder().getBuilder();
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      public com.impinj.stp.StpApi.GetVersionsReaderCommandOrBuilder getGetVersionsReaderOrBuilder() {
        if (getVersionsReaderBuilder_ != null) {
          return getVersionsReaderBuilder_.getMessageOrBuilder();
        } else {
          return getVersionsReader_;
        }
      }
      /**
       *
       * Return all version information reported by the device and by
       * the host-side library.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetVersionsReaderCommand, com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder, com.impinj.stp.StpApi.GetVersionsReaderCommandOrBuilder> 
          getGetVersionsReaderFieldBuilder() {
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReaderBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetVersionsReaderCommand, com.impinj.stp.StpApi.GetVersionsReaderCommand.Builder, com.impinj.stp.StpApi.GetVersionsReaderCommandOrBuilder>(
                  getVersionsReader_,
                  getParentForChildren(),
                  isClean());
          getVersionsReader_ = null;
        }
        return getVersionsReaderBuilder_;
      }

      // optional .Impinj.STP.StartCommand start = 7;
      private com.impinj.stp.StpApi.StartCommand start_ = com.impinj.stp.StpApi.StartCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StartCommand, com.impinj.stp.StpApi.StartCommand.Builder, com.impinj.stp.StpApi.StartCommandOrBuilder> startBuilder_;
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public boolean hasStart() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public com.impinj.stp.StpApi.StartCommand getStart() {
        if (startBuilder_ == null) {
          return start_;
        } else {
          return startBuilder_.getMessage();
        }
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public Builder setStart(com.impinj.stp.StpApi.StartCommand value) {
        if (startBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          start_ = value;
          onChanged();
        } else {
          startBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public Builder setStart(
          com.impinj.stp.StpApi.StartCommand.Builder builderForValue) {
        if (startBuilder_ == null) {
          start_ = builderForValue.build();
          onChanged();
        } else {
          startBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public Builder mergeStart(com.impinj.stp.StpApi.StartCommand value) {
        if (startBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              start_ != com.impinj.stp.StpApi.StartCommand.getDefaultInstance()) {
            start_ =
              com.impinj.stp.StpApi.StartCommand.newBuilder(start_).mergeFrom(value).buildPartial();
          } else {
            start_ = value;
          }
          onChanged();
        } else {
          startBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public Builder clearStart() {
        if (startBuilder_ == null) {
          start_ = com.impinj.stp.StpApi.StartCommand.getDefaultInstance();
          onChanged();
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public com.impinj.stp.StpApi.StartCommand.Builder getStartBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getStartFieldBuilder().getBuilder();
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      public com.impinj.stp.StpApi.StartCommandOrBuilder getStartOrBuilder() {
        if (startBuilder_ != null) {
          return startBuilder_.getMessageOrBuilder();
        } else {
          return start_;
        }
      }
      /**
       *
       * Start the encode or inventory run. The device must be
       * engaged with GPI or by calling engage before starting.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StartCommand, com.impinj.stp.StpApi.StartCommand.Builder, com.impinj.stp.StpApi.StartCommandOrBuilder> 
          getStartFieldBuilder() {
        if (startBuilder_ == null) {
          startBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.StartCommand, com.impinj.stp.StpApi.StartCommand.Builder, com.impinj.stp.StpApi.StartCommandOrBuilder>(
                  start_,
                  getParentForChildren(),
                  isClean());
          start_ = null;
        }
        return startBuilder_;
      }

      // optional .Impinj.STP.StopCommand stop = 8;
      private com.impinj.stp.StpApi.StopCommand stop_ = com.impinj.stp.StpApi.StopCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StopCommand, com.impinj.stp.StpApi.StopCommand.Builder, com.impinj.stp.StpApi.StopCommandOrBuilder> stopBuilder_;
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public boolean hasStop() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public com.impinj.stp.StpApi.StopCommand getStop() {
        if (stopBuilder_ == null) {
          return stop_;
        } else {
          return stopBuilder_.getMessage();
        }
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public Builder setStop(com.impinj.stp.StpApi.StopCommand value) {
        if (stopBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          stop_ = value;
          onChanged();
        } else {
          stopBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public Builder setStop(
          com.impinj.stp.StpApi.StopCommand.Builder builderForValue) {
        if (stopBuilder_ == null) {
          stop_ = builderForValue.build();
          onChanged();
        } else {
          stopBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public Builder mergeStop(com.impinj.stp.StpApi.StopCommand value) {
        if (stopBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              stop_ != com.impinj.stp.StpApi.StopCommand.getDefaultInstance()) {
            stop_ =
              com.impinj.stp.StpApi.StopCommand.newBuilder(stop_).mergeFrom(value).buildPartial();
          } else {
            stop_ = value;
          }
          onChanged();
        } else {
          stopBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public Builder clearStop() {
        if (stopBuilder_ == null) {
          stop_ = com.impinj.stp.StpApi.StopCommand.getDefaultInstance();
          onChanged();
        } else {
          stopBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public com.impinj.stp.StpApi.StopCommand.Builder getStopBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getStopFieldBuilder().getBuilder();
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      public com.impinj.stp.StpApi.StopCommandOrBuilder getStopOrBuilder() {
        if (stopBuilder_ != null) {
          return stopBuilder_.getMessageOrBuilder();
        } else {
          return stop_;
        }
      }
      /**
       *
       * Stop the encode or inventory run. The device must be
       * operating.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StopCommand, com.impinj.stp.StpApi.StopCommand.Builder, com.impinj.stp.StpApi.StopCommandOrBuilder> 
          getStopFieldBuilder() {
        if (stopBuilder_ == null) {
          stopBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.StopCommand, com.impinj.stp.StpApi.StopCommand.Builder, com.impinj.stp.StpApi.StopCommandOrBuilder>(
                  stop_,
                  getParentForChildren(),
                  isClean());
          stop_ = null;
        }
        return stopBuilder_;
      }

      // optional .Impinj.STP.GetDeviceStateCommand get_device_state = 25;
      private com.impinj.stp.StpApi.GetDeviceStateCommand getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceStateCommand, com.impinj.stp.StpApi.GetDeviceStateCommand.Builder, com.impinj.stp.StpApi.GetDeviceStateCommandOrBuilder> getDeviceStateBuilder_;
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public boolean hasGetDeviceState() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public com.impinj.stp.StpApi.GetDeviceStateCommand getGetDeviceState() {
        if (getDeviceStateBuilder_ == null) {
          return getDeviceState_;
        } else {
          return getDeviceStateBuilder_.getMessage();
        }
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public Builder setGetDeviceState(com.impinj.stp.StpApi.GetDeviceStateCommand value) {
        if (getDeviceStateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getDeviceState_ = value;
          onChanged();
        } else {
          getDeviceStateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public Builder setGetDeviceState(
          com.impinj.stp.StpApi.GetDeviceStateCommand.Builder builderForValue) {
        if (getDeviceStateBuilder_ == null) {
          getDeviceState_ = builderForValue.build();
          onChanged();
        } else {
          getDeviceStateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public Builder mergeGetDeviceState(com.impinj.stp.StpApi.GetDeviceStateCommand value) {
        if (getDeviceStateBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              getDeviceState_ != com.impinj.stp.StpApi.GetDeviceStateCommand.getDefaultInstance()) {
            getDeviceState_ =
              com.impinj.stp.StpApi.GetDeviceStateCommand.newBuilder(getDeviceState_).mergeFrom(value).buildPartial();
          } else {
            getDeviceState_ = value;
          }
          onChanged();
        } else {
          getDeviceStateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public Builder clearGetDeviceState() {
        if (getDeviceStateBuilder_ == null) {
          getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateCommand.getDefaultInstance();
          onChanged();
        } else {
          getDeviceStateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public com.impinj.stp.StpApi.GetDeviceStateCommand.Builder getGetDeviceStateBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getGetDeviceStateFieldBuilder().getBuilder();
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      public com.impinj.stp.StpApi.GetDeviceStateCommandOrBuilder getGetDeviceStateOrBuilder() {
        if (getDeviceStateBuilder_ != null) {
          return getDeviceStateBuilder_.getMessageOrBuilder();
        } else {
          return getDeviceState_;
        }
      }
      /**
       *
       * Get the state (operating, fault, etc.) of the device.
       * Contains a fault description, if any.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceStateCommand, com.impinj.stp.StpApi.GetDeviceStateCommand.Builder, com.impinj.stp.StpApi.GetDeviceStateCommandOrBuilder> 
          getGetDeviceStateFieldBuilder() {
        if (getDeviceStateBuilder_ == null) {
          getDeviceStateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetDeviceStateCommand, com.impinj.stp.StpApi.GetDeviceStateCommand.Builder, com.impinj.stp.StpApi.GetDeviceStateCommandOrBuilder>(
                  getDeviceState_,
                  getParentForChildren(),
                  isClean());
          getDeviceState_ = null;
        }
        return getDeviceStateBuilder_;
      }

      // optional .Impinj.STP.SetDeviceConfigCommand set_device_config = 12032;
      private com.impinj.stp.StpApi.SetDeviceConfigCommand setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetDeviceConfigCommand, com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder, com.impinj.stp.StpApi.SetDeviceConfigCommandOrBuilder> setDeviceConfigBuilder_;
      /**
       */
      public boolean hasSetDeviceConfig() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetDeviceConfigCommand getSetDeviceConfig() {
        if (setDeviceConfigBuilder_ == null) {
          return setDeviceConfig_;
        } else {
          return setDeviceConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetDeviceConfig(com.impinj.stp.StpApi.SetDeviceConfigCommand value) {
        if (setDeviceConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setDeviceConfig_ = value;
          onChanged();
        } else {
          setDeviceConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setSetDeviceConfig(
          com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder builderForValue) {
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfig_ = builderForValue.build();
          onChanged();
        } else {
          setDeviceConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeSetDeviceConfig(com.impinj.stp.StpApi.SetDeviceConfigCommand value) {
        if (setDeviceConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              setDeviceConfig_ != com.impinj.stp.StpApi.SetDeviceConfigCommand.getDefaultInstance()) {
            setDeviceConfig_ =
              com.impinj.stp.StpApi.SetDeviceConfigCommand.newBuilder(setDeviceConfig_).mergeFrom(value).buildPartial();
          } else {
            setDeviceConfig_ = value;
          }
          onChanged();
        } else {
          setDeviceConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearSetDeviceConfig() {
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigCommand.getDefaultInstance();
          onChanged();
        } else {
          setDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder getSetDeviceConfigBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getSetDeviceConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetDeviceConfigCommandOrBuilder getSetDeviceConfigOrBuilder() {
        if (setDeviceConfigBuilder_ != null) {
          return setDeviceConfigBuilder_.getMessageOrBuilder();
        } else {
          return setDeviceConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetDeviceConfigCommand, com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder, com.impinj.stp.StpApi.SetDeviceConfigCommandOrBuilder> 
          getSetDeviceConfigFieldBuilder() {
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetDeviceConfigCommand, com.impinj.stp.StpApi.SetDeviceConfigCommand.Builder, com.impinj.stp.StpApi.SetDeviceConfigCommandOrBuilder>(
                  setDeviceConfig_,
                  getParentForChildren(),
                  isClean());
          setDeviceConfig_ = null;
        }
        return setDeviceConfigBuilder_;
      }

      // optional .Impinj.STP.GetDeviceConfigCommand get_device_config = 12033;
      private com.impinj.stp.StpApi.GetDeviceConfigCommand getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceConfigCommand, com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder, com.impinj.stp.StpApi.GetDeviceConfigCommandOrBuilder> getDeviceConfigBuilder_;
      /**
       */
      public boolean hasGetDeviceConfig() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceConfigCommand getGetDeviceConfig() {
        if (getDeviceConfigBuilder_ == null) {
          return getDeviceConfig_;
        } else {
          return getDeviceConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetDeviceConfig(com.impinj.stp.StpApi.GetDeviceConfigCommand value) {
        if (getDeviceConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getDeviceConfig_ = value;
          onChanged();
        } else {
          getDeviceConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder setGetDeviceConfig(
          com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder builderForValue) {
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfig_ = builderForValue.build();
          onChanged();
        } else {
          getDeviceConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder mergeGetDeviceConfig(com.impinj.stp.StpApi.GetDeviceConfigCommand value) {
        if (getDeviceConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              getDeviceConfig_ != com.impinj.stp.StpApi.GetDeviceConfigCommand.getDefaultInstance()) {
            getDeviceConfig_ =
              com.impinj.stp.StpApi.GetDeviceConfigCommand.newBuilder(getDeviceConfig_).mergeFrom(value).buildPartial();
          } else {
            getDeviceConfig_ = value;
          }
          onChanged();
        } else {
          getDeviceConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder clearGetDeviceConfig() {
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigCommand.getDefaultInstance();
          onChanged();
        } else {
          getDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder getGetDeviceConfigBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getGetDeviceConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceConfigCommandOrBuilder getGetDeviceConfigOrBuilder() {
        if (getDeviceConfigBuilder_ != null) {
          return getDeviceConfigBuilder_.getMessageOrBuilder();
        } else {
          return getDeviceConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceConfigCommand, com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder, com.impinj.stp.StpApi.GetDeviceConfigCommandOrBuilder> 
          getGetDeviceConfigFieldBuilder() {
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetDeviceConfigCommand, com.impinj.stp.StpApi.GetDeviceConfigCommand.Builder, com.impinj.stp.StpApi.GetDeviceConfigCommandOrBuilder>(
                  getDeviceConfig_,
                  getParentForChildren(),
                  isClean());
          getDeviceConfig_ = null;
        }
        return getDeviceConfigBuilder_;
      }

      // optional .Impinj.STP.SetAntennaConfigCommand set_antenna_config = 12034;
      private com.impinj.stp.StpApi.SetAntennaConfigCommand setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetAntennaConfigCommand, com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder, com.impinj.stp.StpApi.SetAntennaConfigCommandOrBuilder> setAntennaConfigBuilder_;
      /**
       */
      public boolean hasSetAntennaConfig() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetAntennaConfigCommand getSetAntennaConfig() {
        if (setAntennaConfigBuilder_ == null) {
          return setAntennaConfig_;
        } else {
          return setAntennaConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetAntennaConfig(com.impinj.stp.StpApi.SetAntennaConfigCommand value) {
        if (setAntennaConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setAntennaConfig_ = value;
          onChanged();
        } else {
          setAntennaConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder setSetAntennaConfig(
          com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder builderForValue) {
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfig_ = builderForValue.build();
          onChanged();
        } else {
          setAntennaConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder mergeSetAntennaConfig(com.impinj.stp.StpApi.SetAntennaConfigCommand value) {
        if (setAntennaConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              setAntennaConfig_ != com.impinj.stp.StpApi.SetAntennaConfigCommand.getDefaultInstance()) {
            setAntennaConfig_ =
              com.impinj.stp.StpApi.SetAntennaConfigCommand.newBuilder(setAntennaConfig_).mergeFrom(value).buildPartial();
          } else {
            setAntennaConfig_ = value;
          }
          onChanged();
        } else {
          setAntennaConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder clearSetAntennaConfig() {
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigCommand.getDefaultInstance();
          onChanged();
        } else {
          setAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder getSetAntennaConfigBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getSetAntennaConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetAntennaConfigCommandOrBuilder getSetAntennaConfigOrBuilder() {
        if (setAntennaConfigBuilder_ != null) {
          return setAntennaConfigBuilder_.getMessageOrBuilder();
        } else {
          return setAntennaConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetAntennaConfigCommand, com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder, com.impinj.stp.StpApi.SetAntennaConfigCommandOrBuilder> 
          getSetAntennaConfigFieldBuilder() {
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetAntennaConfigCommand, com.impinj.stp.StpApi.SetAntennaConfigCommand.Builder, com.impinj.stp.StpApi.SetAntennaConfigCommandOrBuilder>(
                  setAntennaConfig_,
                  getParentForChildren(),
                  isClean());
          setAntennaConfig_ = null;
        }
        return setAntennaConfigBuilder_;
      }

      // optional .Impinj.STP.GetAntennaConfigCommand get_antenna_config = 12035;
      private com.impinj.stp.StpApi.GetAntennaConfigCommand getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetAntennaConfigCommand, com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder, com.impinj.stp.StpApi.GetAntennaConfigCommandOrBuilder> getAntennaConfigBuilder_;
      /**
       */
      public boolean hasGetAntennaConfig() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetAntennaConfigCommand getGetAntennaConfig() {
        if (getAntennaConfigBuilder_ == null) {
          return getAntennaConfig_;
        } else {
          return getAntennaConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetAntennaConfig(com.impinj.stp.StpApi.GetAntennaConfigCommand value) {
        if (getAntennaConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getAntennaConfig_ = value;
          onChanged();
        } else {
          getAntennaConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder setGetAntennaConfig(
          com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder builderForValue) {
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfig_ = builderForValue.build();
          onChanged();
        } else {
          getAntennaConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder mergeGetAntennaConfig(com.impinj.stp.StpApi.GetAntennaConfigCommand value) {
        if (getAntennaConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              getAntennaConfig_ != com.impinj.stp.StpApi.GetAntennaConfigCommand.getDefaultInstance()) {
            getAntennaConfig_ =
              com.impinj.stp.StpApi.GetAntennaConfigCommand.newBuilder(getAntennaConfig_).mergeFrom(value).buildPartial();
          } else {
            getAntennaConfig_ = value;
          }
          onChanged();
        } else {
          getAntennaConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder clearGetAntennaConfig() {
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigCommand.getDefaultInstance();
          onChanged();
        } else {
          getAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder getGetAntennaConfigBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getGetAntennaConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetAntennaConfigCommandOrBuilder getGetAntennaConfigOrBuilder() {
        if (getAntennaConfigBuilder_ != null) {
          return getAntennaConfigBuilder_.getMessageOrBuilder();
        } else {
          return getAntennaConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetAntennaConfigCommand, com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder, com.impinj.stp.StpApi.GetAntennaConfigCommandOrBuilder> 
          getGetAntennaConfigFieldBuilder() {
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetAntennaConfigCommand, com.impinj.stp.StpApi.GetAntennaConfigCommand.Builder, com.impinj.stp.StpApi.GetAntennaConfigCommandOrBuilder>(
                  getAntennaConfig_,
                  getParentForChildren(),
                  isClean());
          getAntennaConfig_ = null;
        }
        return getAntennaConfigBuilder_;
      }

      // optional .Impinj.STP.EngageCommand engage = 12036;
      private com.impinj.stp.StpApi.EngageCommand engage_ = com.impinj.stp.StpApi.EngageCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EngageCommand, com.impinj.stp.StpApi.EngageCommand.Builder, com.impinj.stp.StpApi.EngageCommandOrBuilder> engageBuilder_;
      /**
       */
      public boolean hasEngage() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       */
      public com.impinj.stp.StpApi.EngageCommand getEngage() {
        if (engageBuilder_ == null) {
          return engage_;
        } else {
          return engageBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setEngage(com.impinj.stp.StpApi.EngageCommand value) {
        if (engageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          engage_ = value;
          onChanged();
        } else {
          engageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder setEngage(
          com.impinj.stp.StpApi.EngageCommand.Builder builderForValue) {
        if (engageBuilder_ == null) {
          engage_ = builderForValue.build();
          onChanged();
        } else {
          engageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder mergeEngage(com.impinj.stp.StpApi.EngageCommand value) {
        if (engageBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              engage_ != com.impinj.stp.StpApi.EngageCommand.getDefaultInstance()) {
            engage_ =
              com.impinj.stp.StpApi.EngageCommand.newBuilder(engage_).mergeFrom(value).buildPartial();
          } else {
            engage_ = value;
          }
          onChanged();
        } else {
          engageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder clearEngage() {
        if (engageBuilder_ == null) {
          engage_ = com.impinj.stp.StpApi.EngageCommand.getDefaultInstance();
          onChanged();
        } else {
          engageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.EngageCommand.Builder getEngageBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getEngageFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.EngageCommandOrBuilder getEngageOrBuilder() {
        if (engageBuilder_ != null) {
          return engageBuilder_.getMessageOrBuilder();
        } else {
          return engage_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EngageCommand, com.impinj.stp.StpApi.EngageCommand.Builder, com.impinj.stp.StpApi.EngageCommandOrBuilder> 
          getEngageFieldBuilder() {
        if (engageBuilder_ == null) {
          engageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.EngageCommand, com.impinj.stp.StpApi.EngageCommand.Builder, com.impinj.stp.StpApi.EngageCommandOrBuilder>(
                  engage_,
                  getParentForChildren(),
                  isClean());
          engage_ = null;
        }
        return engageBuilder_;
      }

      // optional .Impinj.STP.DisengageCommand disengage = 12037;
      private com.impinj.stp.StpApi.DisengageCommand disengage_ = com.impinj.stp.StpApi.DisengageCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DisengageCommand, com.impinj.stp.StpApi.DisengageCommand.Builder, com.impinj.stp.StpApi.DisengageCommandOrBuilder> disengageBuilder_;
      /**
       */
      public boolean hasDisengage() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       */
      public com.impinj.stp.StpApi.DisengageCommand getDisengage() {
        if (disengageBuilder_ == null) {
          return disengage_;
        } else {
          return disengageBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setDisengage(com.impinj.stp.StpApi.DisengageCommand value) {
        if (disengageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          disengage_ = value;
          onChanged();
        } else {
          disengageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder setDisengage(
          com.impinj.stp.StpApi.DisengageCommand.Builder builderForValue) {
        if (disengageBuilder_ == null) {
          disengage_ = builderForValue.build();
          onChanged();
        } else {
          disengageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder mergeDisengage(com.impinj.stp.StpApi.DisengageCommand value) {
        if (disengageBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              disengage_ != com.impinj.stp.StpApi.DisengageCommand.getDefaultInstance()) {
            disengage_ =
              com.impinj.stp.StpApi.DisengageCommand.newBuilder(disengage_).mergeFrom(value).buildPartial();
          } else {
            disengage_ = value;
          }
          onChanged();
        } else {
          disengageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder clearDisengage() {
        if (disengageBuilder_ == null) {
          disengage_ = com.impinj.stp.StpApi.DisengageCommand.getDefaultInstance();
          onChanged();
        } else {
          disengageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.DisengageCommand.Builder getDisengageBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getDisengageFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.DisengageCommandOrBuilder getDisengageOrBuilder() {
        if (disengageBuilder_ != null) {
          return disengageBuilder_.getMessageOrBuilder();
        } else {
          return disengage_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DisengageCommand, com.impinj.stp.StpApi.DisengageCommand.Builder, com.impinj.stp.StpApi.DisengageCommandOrBuilder> 
          getDisengageFieldBuilder() {
        if (disengageBuilder_ == null) {
          disengageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DisengageCommand, com.impinj.stp.StpApi.DisengageCommand.Builder, com.impinj.stp.StpApi.DisengageCommandOrBuilder>(
                  disengage_,
                  getParentForChildren(),
                  isClean());
          disengage_ = null;
        }
        return disengageBuilder_;
      }

      // optional .Impinj.STP.SetOperationResultGPOCommand set_operation_result_gpo = 12038;
      private com.impinj.stp.StpApi.SetOperationResultGPOCommand setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetOperationResultGPOCommand, com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder, com.impinj.stp.StpApi.SetOperationResultGPOCommandOrBuilder> setOperationResultGpoBuilder_;
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public boolean hasSetOperationResultGpo() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public com.impinj.stp.StpApi.SetOperationResultGPOCommand getSetOperationResultGpo() {
        if (setOperationResultGpoBuilder_ == null) {
          return setOperationResultGpo_;
        } else {
          return setOperationResultGpoBuilder_.getMessage();
        }
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public Builder setSetOperationResultGpo(com.impinj.stp.StpApi.SetOperationResultGPOCommand value) {
        if (setOperationResultGpoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setOperationResultGpo_ = value;
          onChanged();
        } else {
          setOperationResultGpoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public Builder setSetOperationResultGpo(
          com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder builderForValue) {
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpo_ = builderForValue.build();
          onChanged();
        } else {
          setOperationResultGpoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public Builder mergeSetOperationResultGpo(com.impinj.stp.StpApi.SetOperationResultGPOCommand value) {
        if (setOperationResultGpoBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              setOperationResultGpo_ != com.impinj.stp.StpApi.SetOperationResultGPOCommand.getDefaultInstance()) {
            setOperationResultGpo_ =
              com.impinj.stp.StpApi.SetOperationResultGPOCommand.newBuilder(setOperationResultGpo_).mergeFrom(value).buildPartial();
          } else {
            setOperationResultGpo_ = value;
          }
          onChanged();
        } else {
          setOperationResultGpoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public Builder clearSetOperationResultGpo() {
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOCommand.getDefaultInstance();
          onChanged();
        } else {
          setOperationResultGpoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder getSetOperationResultGpoBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getSetOperationResultGpoFieldBuilder().getBuilder();
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      public com.impinj.stp.StpApi.SetOperationResultGPOCommandOrBuilder getSetOperationResultGpoOrBuilder() {
        if (setOperationResultGpoBuilder_ != null) {
          return setOperationResultGpoBuilder_.getMessageOrBuilder();
        } else {
          return setOperationResultGpo_;
        }
      }
      /**
       *
       * When the GPOConfig enable_operation_result_gpo is set false,
       * this command lets the client application set the pass/fail
       * GPO based on its own pass/fail conditions.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetOperationResultGPOCommand, com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder, com.impinj.stp.StpApi.SetOperationResultGPOCommandOrBuilder> 
          getSetOperationResultGpoFieldBuilder() {
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetOperationResultGPOCommand, com.impinj.stp.StpApi.SetOperationResultGPOCommand.Builder, com.impinj.stp.StpApi.SetOperationResultGPOCommandOrBuilder>(
                  setOperationResultGpo_,
                  getParentForChildren(),
                  isClean());
          setOperationResultGpo_ = null;
        }
        return setOperationResultGpoBuilder_;
      }

      // optional .Impinj.STP.AddSerializationJobCommand add_serialization_job = 12039;
      private com.impinj.stp.StpApi.AddSerializationJobCommand addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddSerializationJobCommand, com.impinj.stp.StpApi.AddSerializationJobCommand.Builder, com.impinj.stp.StpApi.AddSerializationJobCommandOrBuilder> addSerializationJobBuilder_;
      /**
       */
      public boolean hasAddSerializationJob() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddSerializationJobCommand getAddSerializationJob() {
        if (addSerializationJobBuilder_ == null) {
          return addSerializationJob_;
        } else {
          return addSerializationJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddSerializationJob(com.impinj.stp.StpApi.AddSerializationJobCommand value) {
        if (addSerializationJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addSerializationJob_ = value;
          onChanged();
        } else {
          addSerializationJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       */
      public Builder setAddSerializationJob(
          com.impinj.stp.StpApi.AddSerializationJobCommand.Builder builderForValue) {
        if (addSerializationJobBuilder_ == null) {
          addSerializationJob_ = builderForValue.build();
          onChanged();
        } else {
          addSerializationJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       */
      public Builder mergeAddSerializationJob(com.impinj.stp.StpApi.AddSerializationJobCommand value) {
        if (addSerializationJobBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000) &&
              addSerializationJob_ != com.impinj.stp.StpApi.AddSerializationJobCommand.getDefaultInstance()) {
            addSerializationJob_ =
              com.impinj.stp.StpApi.AddSerializationJobCommand.newBuilder(addSerializationJob_).mergeFrom(value).buildPartial();
          } else {
            addSerializationJob_ = value;
          }
          onChanged();
        } else {
          addSerializationJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       */
      public Builder clearAddSerializationJob() {
        if (addSerializationJobBuilder_ == null) {
          addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobCommand.getDefaultInstance();
          onChanged();
        } else {
          addSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddSerializationJobCommand.Builder getAddSerializationJobBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getAddSerializationJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddSerializationJobCommandOrBuilder getAddSerializationJobOrBuilder() {
        if (addSerializationJobBuilder_ != null) {
          return addSerializationJobBuilder_.getMessageOrBuilder();
        } else {
          return addSerializationJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddSerializationJobCommand, com.impinj.stp.StpApi.AddSerializationJobCommand.Builder, com.impinj.stp.StpApi.AddSerializationJobCommandOrBuilder> 
          getAddSerializationJobFieldBuilder() {
        if (addSerializationJobBuilder_ == null) {
          addSerializationJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddSerializationJobCommand, com.impinj.stp.StpApi.AddSerializationJobCommand.Builder, com.impinj.stp.StpApi.AddSerializationJobCommandOrBuilder>(
                  addSerializationJob_,
                  getParentForChildren(),
                  isClean());
          addSerializationJob_ = null;
        }
        return addSerializationJobBuilder_;
      }

      // optional .Impinj.STP.RemoveSerializationJobCommand remove_serialization_job = 12040;
      private com.impinj.stp.StpApi.RemoveSerializationJobCommand removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.RemoveSerializationJobCommand, com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder, com.impinj.stp.StpApi.RemoveSerializationJobCommandOrBuilder> removeSerializationJobBuilder_;
      /**
       */
      public boolean hasRemoveSerializationJob() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       */
      public com.impinj.stp.StpApi.RemoveSerializationJobCommand getRemoveSerializationJob() {
        if (removeSerializationJobBuilder_ == null) {
          return removeSerializationJob_;
        } else {
          return removeSerializationJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setRemoveSerializationJob(com.impinj.stp.StpApi.RemoveSerializationJobCommand value) {
        if (removeSerializationJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          removeSerializationJob_ = value;
          onChanged();
        } else {
          removeSerializationJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       */
      public Builder setRemoveSerializationJob(
          com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder builderForValue) {
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJob_ = builderForValue.build();
          onChanged();
        } else {
          removeSerializationJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       */
      public Builder mergeRemoveSerializationJob(com.impinj.stp.StpApi.RemoveSerializationJobCommand value) {
        if (removeSerializationJobBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000) &&
              removeSerializationJob_ != com.impinj.stp.StpApi.RemoveSerializationJobCommand.getDefaultInstance()) {
            removeSerializationJob_ =
              com.impinj.stp.StpApi.RemoveSerializationJobCommand.newBuilder(removeSerializationJob_).mergeFrom(value).buildPartial();
          } else {
            removeSerializationJob_ = value;
          }
          onChanged();
        } else {
          removeSerializationJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       */
      public Builder clearRemoveSerializationJob() {
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobCommand.getDefaultInstance();
          onChanged();
        } else {
          removeSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder getRemoveSerializationJobBuilder() {
        bitField0_ |= 0x00002000;
        onChanged();
        return getRemoveSerializationJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.RemoveSerializationJobCommandOrBuilder getRemoveSerializationJobOrBuilder() {
        if (removeSerializationJobBuilder_ != null) {
          return removeSerializationJobBuilder_.getMessageOrBuilder();
        } else {
          return removeSerializationJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.RemoveSerializationJobCommand, com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder, com.impinj.stp.StpApi.RemoveSerializationJobCommandOrBuilder> 
          getRemoveSerializationJobFieldBuilder() {
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.RemoveSerializationJobCommand, com.impinj.stp.StpApi.RemoveSerializationJobCommand.Builder, com.impinj.stp.StpApi.RemoveSerializationJobCommandOrBuilder>(
                  removeSerializationJob_,
                  getParentForChildren(),
                  isClean());
          removeSerializationJob_ = null;
        }
        return removeSerializationJobBuilder_;
      }

      // optional .Impinj.STP.AddTIDTableEntriesCommand add_tid_table_entries = 12041;
      private com.impinj.stp.StpApi.AddTIDTableEntriesCommand addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddTIDTableEntriesCommand, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder> addTidTableEntriesBuilder_;
      /**
       */
      public boolean hasAddTidTableEntries() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesCommand getAddTidTableEntries() {
        if (addTidTableEntriesBuilder_ == null) {
          return addTidTableEntries_;
        } else {
          return addTidTableEntriesBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddTidTableEntries(com.impinj.stp.StpApi.AddTIDTableEntriesCommand value) {
        if (addTidTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addTidTableEntries_ = value;
          onChanged();
        } else {
          addTidTableEntriesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       */
      public Builder setAddTidTableEntries(
          com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder builderForValue) {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = builderForValue.build();
          onChanged();
        } else {
          addTidTableEntriesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       */
      public Builder mergeAddTidTableEntries(com.impinj.stp.StpApi.AddTIDTableEntriesCommand value) {
        if (addTidTableEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000) &&
              addTidTableEntries_ != com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance()) {
            addTidTableEntries_ =
              com.impinj.stp.StpApi.AddTIDTableEntriesCommand.newBuilder(addTidTableEntries_).mergeFrom(value).buildPartial();
          } else {
            addTidTableEntries_ = value;
          }
          onChanged();
        } else {
          addTidTableEntriesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       */
      public Builder clearAddTidTableEntries() {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
          onChanged();
        } else {
          addTidTableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder getAddTidTableEntriesBuilder() {
        bitField0_ |= 0x00004000;
        onChanged();
        return getAddTidTableEntriesFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder getAddTidTableEntriesOrBuilder() {
        if (addTidTableEntriesBuilder_ != null) {
          return addTidTableEntriesBuilder_.getMessageOrBuilder();
        } else {
          return addTidTableEntries_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddTIDTableEntriesCommand, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder> 
          getAddTidTableEntriesFieldBuilder() {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntriesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddTIDTableEntriesCommand, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder>(
                  addTidTableEntries_,
                  getParentForChildren(),
                  isClean());
          addTidTableEntries_ = null;
        }
        return addTidTableEntriesBuilder_;
      }

      // optional .Impinj.STP.AddOrderedListEntriesCommand add_ordered_list_entries = 12042;
      private com.impinj.stp.StpApi.AddOrderedListEntriesCommand addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddOrderedListEntriesCommand, com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder, com.impinj.stp.StpApi.AddOrderedListEntriesCommandOrBuilder> addOrderedListEntriesBuilder_;
      /**
       */
      public boolean hasAddOrderedListEntries() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddOrderedListEntriesCommand getAddOrderedListEntries() {
        if (addOrderedListEntriesBuilder_ == null) {
          return addOrderedListEntries_;
        } else {
          return addOrderedListEntriesBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddOrderedListEntries(com.impinj.stp.StpApi.AddOrderedListEntriesCommand value) {
        if (addOrderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addOrderedListEntries_ = value;
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       */
      public Builder setAddOrderedListEntries(
          com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder builderForValue) {
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntries_ = builderForValue.build();
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       */
      public Builder mergeAddOrderedListEntries(com.impinj.stp.StpApi.AddOrderedListEntriesCommand value) {
        if (addOrderedListEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000) &&
              addOrderedListEntries_ != com.impinj.stp.StpApi.AddOrderedListEntriesCommand.getDefaultInstance()) {
            addOrderedListEntries_ =
              com.impinj.stp.StpApi.AddOrderedListEntriesCommand.newBuilder(addOrderedListEntries_).mergeFrom(value).buildPartial();
          } else {
            addOrderedListEntries_ = value;
          }
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       */
      public Builder clearAddOrderedListEntries() {
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesCommand.getDefaultInstance();
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder getAddOrderedListEntriesBuilder() {
        bitField0_ |= 0x00008000;
        onChanged();
        return getAddOrderedListEntriesFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddOrderedListEntriesCommandOrBuilder getAddOrderedListEntriesOrBuilder() {
        if (addOrderedListEntriesBuilder_ != null) {
          return addOrderedListEntriesBuilder_.getMessageOrBuilder();
        } else {
          return addOrderedListEntries_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddOrderedListEntriesCommand, com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder, com.impinj.stp.StpApi.AddOrderedListEntriesCommandOrBuilder> 
          getAddOrderedListEntriesFieldBuilder() {
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntriesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddOrderedListEntriesCommand, com.impinj.stp.StpApi.AddOrderedListEntriesCommand.Builder, com.impinj.stp.StpApi.AddOrderedListEntriesCommandOrBuilder>(
                  addOrderedListEntries_,
                  getParentForChildren(),
                  isClean());
          addOrderedListEntries_ = null;
        }
        return addOrderedListEntriesBuilder_;
      }

      // optional .Impinj.STP.SetInventoryJobCommand set_inventory_job = 12043;
      private com.impinj.stp.StpApi.SetInventoryJobCommand setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetInventoryJobCommand, com.impinj.stp.StpApi.SetInventoryJobCommand.Builder, com.impinj.stp.StpApi.SetInventoryJobCommandOrBuilder> setInventoryJobBuilder_;
      /**
       */
      public boolean hasSetInventoryJob() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetInventoryJobCommand getSetInventoryJob() {
        if (setInventoryJobBuilder_ == null) {
          return setInventoryJob_;
        } else {
          return setInventoryJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetInventoryJob(com.impinj.stp.StpApi.SetInventoryJobCommand value) {
        if (setInventoryJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setInventoryJob_ = value;
          onChanged();
        } else {
          setInventoryJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       */
      public Builder setSetInventoryJob(
          com.impinj.stp.StpApi.SetInventoryJobCommand.Builder builderForValue) {
        if (setInventoryJobBuilder_ == null) {
          setInventoryJob_ = builderForValue.build();
          onChanged();
        } else {
          setInventoryJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       */
      public Builder mergeSetInventoryJob(com.impinj.stp.StpApi.SetInventoryJobCommand value) {
        if (setInventoryJobBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000) &&
              setInventoryJob_ != com.impinj.stp.StpApi.SetInventoryJobCommand.getDefaultInstance()) {
            setInventoryJob_ =
              com.impinj.stp.StpApi.SetInventoryJobCommand.newBuilder(setInventoryJob_).mergeFrom(value).buildPartial();
          } else {
            setInventoryJob_ = value;
          }
          onChanged();
        } else {
          setInventoryJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       */
      public Builder clearSetInventoryJob() {
        if (setInventoryJobBuilder_ == null) {
          setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobCommand.getDefaultInstance();
          onChanged();
        } else {
          setInventoryJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetInventoryJobCommand.Builder getSetInventoryJobBuilder() {
        bitField0_ |= 0x00010000;
        onChanged();
        return getSetInventoryJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetInventoryJobCommandOrBuilder getSetInventoryJobOrBuilder() {
        if (setInventoryJobBuilder_ != null) {
          return setInventoryJobBuilder_.getMessageOrBuilder();
        } else {
          return setInventoryJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetInventoryJobCommand, com.impinj.stp.StpApi.SetInventoryJobCommand.Builder, com.impinj.stp.StpApi.SetInventoryJobCommandOrBuilder> 
          getSetInventoryJobFieldBuilder() {
        if (setInventoryJobBuilder_ == null) {
          setInventoryJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetInventoryJobCommand, com.impinj.stp.StpApi.SetInventoryJobCommand.Builder, com.impinj.stp.StpApi.SetInventoryJobCommandOrBuilder>(
                  setInventoryJob_,
                  getParentForChildren(),
                  isClean());
          setInventoryJob_ = null;
        }
        return setInventoryJobBuilder_;
      }

      // optional .Impinj.STP.SetCartonContentsJobCommand set_carton_contents_job = 12044;
      private com.impinj.stp.StpApi.SetCartonContentsJobCommand setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetCartonContentsJobCommand, com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder, com.impinj.stp.StpApi.SetCartonContentsJobCommandOrBuilder> setCartonContentsJobBuilder_;
      /**
       */
      public boolean hasSetCartonContentsJob() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetCartonContentsJobCommand getSetCartonContentsJob() {
        if (setCartonContentsJobBuilder_ == null) {
          return setCartonContentsJob_;
        } else {
          return setCartonContentsJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetCartonContentsJob(com.impinj.stp.StpApi.SetCartonContentsJobCommand value) {
        if (setCartonContentsJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setCartonContentsJob_ = value;
          onChanged();
        } else {
          setCartonContentsJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder setSetCartonContentsJob(
          com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder builderForValue) {
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJob_ = builderForValue.build();
          onChanged();
        } else {
          setCartonContentsJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder mergeSetCartonContentsJob(com.impinj.stp.StpApi.SetCartonContentsJobCommand value) {
        if (setCartonContentsJobBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000) &&
              setCartonContentsJob_ != com.impinj.stp.StpApi.SetCartonContentsJobCommand.getDefaultInstance()) {
            setCartonContentsJob_ =
              com.impinj.stp.StpApi.SetCartonContentsJobCommand.newBuilder(setCartonContentsJob_).mergeFrom(value).buildPartial();
          } else {
            setCartonContentsJob_ = value;
          }
          onChanged();
        } else {
          setCartonContentsJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder clearSetCartonContentsJob() {
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobCommand.getDefaultInstance();
          onChanged();
        } else {
          setCartonContentsJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder getSetCartonContentsJobBuilder() {
        bitField0_ |= 0x00020000;
        onChanged();
        return getSetCartonContentsJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetCartonContentsJobCommandOrBuilder getSetCartonContentsJobOrBuilder() {
        if (setCartonContentsJobBuilder_ != null) {
          return setCartonContentsJobBuilder_.getMessageOrBuilder();
        } else {
          return setCartonContentsJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetCartonContentsJobCommand, com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder, com.impinj.stp.StpApi.SetCartonContentsJobCommandOrBuilder> 
          getSetCartonContentsJobFieldBuilder() {
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetCartonContentsJobCommand, com.impinj.stp.StpApi.SetCartonContentsJobCommand.Builder, com.impinj.stp.StpApi.SetCartonContentsJobCommandOrBuilder>(
                  setCartonContentsJob_,
                  getParentForChildren(),
                  isClean());
          setCartonContentsJob_ = null;
        }
        return setCartonContentsJobBuilder_;
      }

      // optional .Impinj.STP.GetOperationDataCommand get_operation_data = 12045;
      private com.impinj.stp.StpApi.GetOperationDataCommand getOperationData_ = com.impinj.stp.StpApi.GetOperationDataCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetOperationDataCommand, com.impinj.stp.StpApi.GetOperationDataCommand.Builder, com.impinj.stp.StpApi.GetOperationDataCommandOrBuilder> getOperationDataBuilder_;
      /**
       */
      public boolean hasGetOperationData() {
        return ((bitField0_ & 0x00040000) == 0x00040000);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetOperationDataCommand getGetOperationData() {
        if (getOperationDataBuilder_ == null) {
          return getOperationData_;
        } else {
          return getOperationDataBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetOperationData(com.impinj.stp.StpApi.GetOperationDataCommand value) {
        if (getOperationDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getOperationData_ = value;
          onChanged();
        } else {
          getOperationDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       */
      public Builder setGetOperationData(
          com.impinj.stp.StpApi.GetOperationDataCommand.Builder builderForValue) {
        if (getOperationDataBuilder_ == null) {
          getOperationData_ = builderForValue.build();
          onChanged();
        } else {
          getOperationDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       */
      public Builder mergeGetOperationData(com.impinj.stp.StpApi.GetOperationDataCommand value) {
        if (getOperationDataBuilder_ == null) {
          if (((bitField0_ & 0x00040000) == 0x00040000) &&
              getOperationData_ != com.impinj.stp.StpApi.GetOperationDataCommand.getDefaultInstance()) {
            getOperationData_ =
              com.impinj.stp.StpApi.GetOperationDataCommand.newBuilder(getOperationData_).mergeFrom(value).buildPartial();
          } else {
            getOperationData_ = value;
          }
          onChanged();
        } else {
          getOperationDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       */
      public Builder clearGetOperationData() {
        if (getOperationDataBuilder_ == null) {
          getOperationData_ = com.impinj.stp.StpApi.GetOperationDataCommand.getDefaultInstance();
          onChanged();
        } else {
          getOperationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00040000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetOperationDataCommand.Builder getGetOperationDataBuilder() {
        bitField0_ |= 0x00040000;
        onChanged();
        return getGetOperationDataFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetOperationDataCommandOrBuilder getGetOperationDataOrBuilder() {
        if (getOperationDataBuilder_ != null) {
          return getOperationDataBuilder_.getMessageOrBuilder();
        } else {
          return getOperationData_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetOperationDataCommand, com.impinj.stp.StpApi.GetOperationDataCommand.Builder, com.impinj.stp.StpApi.GetOperationDataCommandOrBuilder> 
          getGetOperationDataFieldBuilder() {
        if (getOperationDataBuilder_ == null) {
          getOperationDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetOperationDataCommand, com.impinj.stp.StpApi.GetOperationDataCommand.Builder, com.impinj.stp.StpApi.GetOperationDataCommandOrBuilder>(
                  getOperationData_,
                  getParentForChildren(),
                  isClean());
          getOperationData_ = null;
        }
        return getOperationDataBuilder_;
      }

      // optional .Impinj.STP.AddLicenseKeyCommand add_license_key = 12046;
      private com.impinj.stp.StpApi.AddLicenseKeyCommand addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddLicenseKeyCommand, com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder, com.impinj.stp.StpApi.AddLicenseKeyCommandOrBuilder> addLicenseKeyBuilder_;
      /**
       */
      public boolean hasAddLicenseKey() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddLicenseKeyCommand getAddLicenseKey() {
        if (addLicenseKeyBuilder_ == null) {
          return addLicenseKey_;
        } else {
          return addLicenseKeyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddLicenseKey(com.impinj.stp.StpApi.AddLicenseKeyCommand value) {
        if (addLicenseKeyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addLicenseKey_ = value;
          onChanged();
        } else {
          addLicenseKeyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       */
      public Builder setAddLicenseKey(
          com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder builderForValue) {
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKey_ = builderForValue.build();
          onChanged();
        } else {
          addLicenseKeyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       */
      public Builder mergeAddLicenseKey(com.impinj.stp.StpApi.AddLicenseKeyCommand value) {
        if (addLicenseKeyBuilder_ == null) {
          if (((bitField0_ & 0x00080000) == 0x00080000) &&
              addLicenseKey_ != com.impinj.stp.StpApi.AddLicenseKeyCommand.getDefaultInstance()) {
            addLicenseKey_ =
              com.impinj.stp.StpApi.AddLicenseKeyCommand.newBuilder(addLicenseKey_).mergeFrom(value).buildPartial();
          } else {
            addLicenseKey_ = value;
          }
          onChanged();
        } else {
          addLicenseKeyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       */
      public Builder clearAddLicenseKey() {
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyCommand.getDefaultInstance();
          onChanged();
        } else {
          addLicenseKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder getAddLicenseKeyBuilder() {
        bitField0_ |= 0x00080000;
        onChanged();
        return getAddLicenseKeyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddLicenseKeyCommandOrBuilder getAddLicenseKeyOrBuilder() {
        if (addLicenseKeyBuilder_ != null) {
          return addLicenseKeyBuilder_.getMessageOrBuilder();
        } else {
          return addLicenseKey_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddLicenseKeyCommand, com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder, com.impinj.stp.StpApi.AddLicenseKeyCommandOrBuilder> 
          getAddLicenseKeyFieldBuilder() {
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKeyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddLicenseKeyCommand, com.impinj.stp.StpApi.AddLicenseKeyCommand.Builder, com.impinj.stp.StpApi.AddLicenseKeyCommandOrBuilder>(
                  addLicenseKey_,
                  getParentForChildren(),
                  isClean());
          addLicenseKey_ = null;
        }
        return addLicenseKeyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Command)
    }

    static {
      defaultInstance = new Command(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Command)
  }

  public interface ResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.ConnectResp connect = 1;
    /**
     *
     * ************************************************************
     * **************************
     */
    boolean hasConnect();
    /**
     *
     * ************************************************************
     * **************************
     */
    com.impinj.stp.StpApi.ConnectResp getConnect();
    /**
     *
     * ************************************************************
     * **************************
     */
    com.impinj.stp.StpApi.ConnectRespOrBuilder getConnectOrBuilder();

    // optional .Impinj.STP.GetVersionsReaderResp get_versions_reader = 2;
    /**
     */
    boolean hasGetVersionsReader();
    /**
     */
    com.impinj.stp.StpApi.GetVersionsReaderResp getGetVersionsReader();
    /**
     */
    com.impinj.stp.StpApi.GetVersionsReaderRespOrBuilder getGetVersionsReaderOrBuilder();

    // optional .Impinj.STP.StartResp start = 7;
    /**
     */
    boolean hasStart();
    /**
     */
    com.impinj.stp.StpApi.StartResp getStart();
    /**
     */
    com.impinj.stp.StpApi.StartRespOrBuilder getStartOrBuilder();

    // optional .Impinj.STP.StopResp stop = 8;
    /**
     */
    boolean hasStop();
    /**
     */
    com.impinj.stp.StpApi.StopResp getStop();
    /**
     */
    com.impinj.stp.StpApi.StopRespOrBuilder getStopOrBuilder();

    // optional .Impinj.STP.InvalidResp invalid = 15;
    /**
     */
    boolean hasInvalid();
    /**
     */
    com.impinj.stp.StpApi.InvalidResp getInvalid();
    /**
     */
    com.impinj.stp.StpApi.InvalidRespOrBuilder getInvalidOrBuilder();

    // optional .Impinj.STP.GetDeviceStateResp get_device_state = 25;
    /**
     */
    boolean hasGetDeviceState();
    /**
     */
    com.impinj.stp.StpApi.GetDeviceStateResp getGetDeviceState();
    /**
     */
    com.impinj.stp.StpApi.GetDeviceStateRespOrBuilder getGetDeviceStateOrBuilder();

    // optional .Impinj.STP.SetDeviceConfigResp set_device_config = 12032;
    /**
     */
    boolean hasSetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.SetDeviceConfigResp getSetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.SetDeviceConfigRespOrBuilder getSetDeviceConfigOrBuilder();

    // optional .Impinj.STP.GetDeviceConfigResp get_device_config = 12033;
    /**
     */
    boolean hasGetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.GetDeviceConfigResp getGetDeviceConfig();
    /**
     */
    com.impinj.stp.StpApi.GetDeviceConfigRespOrBuilder getGetDeviceConfigOrBuilder();

    // optional .Impinj.STP.SetAntennaConfigResp set_antenna_config = 12034;
    /**
     */
    boolean hasSetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.SetAntennaConfigResp getSetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.SetAntennaConfigRespOrBuilder getSetAntennaConfigOrBuilder();

    // optional .Impinj.STP.GetAntennaConfigResp get_antenna_config = 12035;
    /**
     */
    boolean hasGetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.GetAntennaConfigResp getGetAntennaConfig();
    /**
     */
    com.impinj.stp.StpApi.GetAntennaConfigRespOrBuilder getGetAntennaConfigOrBuilder();

    // optional .Impinj.STP.EngageResp engage = 12036;
    /**
     */
    boolean hasEngage();
    /**
     */
    com.impinj.stp.StpApi.EngageResp getEngage();
    /**
     */
    com.impinj.stp.StpApi.EngageRespOrBuilder getEngageOrBuilder();

    // optional .Impinj.STP.DisengageResp disengage = 12037;
    /**
     */
    boolean hasDisengage();
    /**
     */
    com.impinj.stp.StpApi.DisengageResp getDisengage();
    /**
     */
    com.impinj.stp.StpApi.DisengageRespOrBuilder getDisengageOrBuilder();

    // optional .Impinj.STP.SetOperationResultGPOResp set_operation_result_gpo = 12041;
    /**
     *
     * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
     */
    boolean hasSetOperationResultGpo();
    /**
     *
     * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
     */
    com.impinj.stp.StpApi.SetOperationResultGPOResp getSetOperationResultGpo();
    /**
     *
     * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
     */
    com.impinj.stp.StpApi.SetOperationResultGPORespOrBuilder getSetOperationResultGpoOrBuilder();

    // optional .Impinj.STP.AddSerializationJobResp add_serialization_job = 12042;
    /**
     */
    boolean hasAddSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.AddSerializationJobResp getAddSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.AddSerializationJobRespOrBuilder getAddSerializationJobOrBuilder();

    // optional .Impinj.STP.RemoveSerializationJobResp remove_serialization_job = 12043;
    /**
     */
    boolean hasRemoveSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.RemoveSerializationJobResp getRemoveSerializationJob();
    /**
     */
    com.impinj.stp.StpApi.RemoveSerializationJobRespOrBuilder getRemoveSerializationJobOrBuilder();

    // optional .Impinj.STP.AddTIDTableEntriesResp add_tid_table_entries = 12044;
    /**
     */
    boolean hasAddTidTableEntries();
    /**
     */
    com.impinj.stp.StpApi.AddTIDTableEntriesResp getAddTidTableEntries();
    /**
     */
    com.impinj.stp.StpApi.AddTIDTableEntriesRespOrBuilder getAddTidTableEntriesOrBuilder();

    // optional .Impinj.STP.AddOrderedListEntriesResp add_ordered_list_entries = 12045;
    /**
     */
    boolean hasAddOrderedListEntries();
    /**
     */
    com.impinj.stp.StpApi.AddOrderedListEntriesResp getAddOrderedListEntries();
    /**
     */
    com.impinj.stp.StpApi.AddOrderedListEntriesRespOrBuilder getAddOrderedListEntriesOrBuilder();

    // optional .Impinj.STP.SetInventoryJobResp set_inventory_job = 12046;
    /**
     */
    boolean hasSetInventoryJob();
    /**
     */
    com.impinj.stp.StpApi.SetInventoryJobResp getSetInventoryJob();
    /**
     */
    com.impinj.stp.StpApi.SetInventoryJobRespOrBuilder getSetInventoryJobOrBuilder();

    // optional .Impinj.STP.SetCartonContentsJobResp set_carton_contents_job = 12047;
    /**
     */
    boolean hasSetCartonContentsJob();
    /**
     */
    com.impinj.stp.StpApi.SetCartonContentsJobResp getSetCartonContentsJob();
    /**
     */
    com.impinj.stp.StpApi.SetCartonContentsJobRespOrBuilder getSetCartonContentsJobOrBuilder();

    // optional .Impinj.STP.GetOperationDataResp get_operation_data = 12048;
    /**
     */
    boolean hasGetOperationData();
    /**
     */
    com.impinj.stp.StpApi.GetOperationDataResp getGetOperationData();
    /**
     */
    com.impinj.stp.StpApi.GetOperationDataRespOrBuilder getGetOperationDataOrBuilder();

    // optional .Impinj.STP.AddLicenseKeyResp add_license_key = 12049;
    /**
     */
    boolean hasAddLicenseKey();
    /**
     */
    com.impinj.stp.StpApi.AddLicenseKeyResp getAddLicenseKey();
    /**
     */
    com.impinj.stp.StpApi.AddLicenseKeyRespOrBuilder getAddLicenseKeyOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.Response}
   *
   * From Impinj Device to Host
   */
  public static final class Response extends
      com.google.protobuf.GeneratedMessage
      implements ResponseOrBuilder {
    // Use Response.newBuilder() to construct.
    private Response(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Response(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Response defaultInstance;
    public static Response getDefaultInstance() {
      return defaultInstance;
    }

    public Response getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Response(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.ConnectResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = connect_.toBuilder();
              }
              connect_ = input.readMessage(com.impinj.stp.StpApi.ConnectResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(connect_);
                connect_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.GetVersionsReaderResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = getVersionsReader_.toBuilder();
              }
              getVersionsReader_ = input.readMessage(com.impinj.stp.StpApi.GetVersionsReaderResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getVersionsReader_);
                getVersionsReader_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 58: {
              com.impinj.stp.StpApi.StartResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = start_.toBuilder();
              }
              start_ = input.readMessage(com.impinj.stp.StpApi.StartResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(start_);
                start_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 66: {
              com.impinj.stp.StpApi.StopResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = stop_.toBuilder();
              }
              stop_ = input.readMessage(com.impinj.stp.StpApi.StopResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(stop_);
                stop_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 122: {
              com.impinj.stp.StpApi.InvalidResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = invalid_.toBuilder();
              }
              invalid_ = input.readMessage(com.impinj.stp.StpApi.InvalidResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(invalid_);
                invalid_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 202: {
              com.impinj.stp.StpApi.GetDeviceStateResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = getDeviceState_.toBuilder();
              }
              getDeviceState_ = input.readMessage(com.impinj.stp.StpApi.GetDeviceStateResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getDeviceState_);
                getDeviceState_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 96258: {
              com.impinj.stp.StpApi.SetDeviceConfigResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = setDeviceConfig_.toBuilder();
              }
              setDeviceConfig_ = input.readMessage(com.impinj.stp.StpApi.SetDeviceConfigResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setDeviceConfig_);
                setDeviceConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 96266: {
              com.impinj.stp.StpApi.GetDeviceConfigResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = getDeviceConfig_.toBuilder();
              }
              getDeviceConfig_ = input.readMessage(com.impinj.stp.StpApi.GetDeviceConfigResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getDeviceConfig_);
                getDeviceConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 96274: {
              com.impinj.stp.StpApi.SetAntennaConfigResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = setAntennaConfig_.toBuilder();
              }
              setAntennaConfig_ = input.readMessage(com.impinj.stp.StpApi.SetAntennaConfigResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setAntennaConfig_);
                setAntennaConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 96282: {
              com.impinj.stp.StpApi.GetAntennaConfigResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = getAntennaConfig_.toBuilder();
              }
              getAntennaConfig_ = input.readMessage(com.impinj.stp.StpApi.GetAntennaConfigResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getAntennaConfig_);
                getAntennaConfig_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 96290: {
              com.impinj.stp.StpApi.EngageResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = engage_.toBuilder();
              }
              engage_ = input.readMessage(com.impinj.stp.StpApi.EngageResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(engage_);
                engage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 96298: {
              com.impinj.stp.StpApi.DisengageResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00000800) == 0x00000800)) {
                subBuilder = disengage_.toBuilder();
              }
              disengage_ = input.readMessage(com.impinj.stp.StpApi.DisengageResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(disengage_);
                disengage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000800;
              break;
            }
            case 96330: {
              com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00001000) == 0x00001000)) {
                subBuilder = setOperationResultGpo_.toBuilder();
              }
              setOperationResultGpo_ = input.readMessage(com.impinj.stp.StpApi.SetOperationResultGPOResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setOperationResultGpo_);
                setOperationResultGpo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00001000;
              break;
            }
            case 96338: {
              com.impinj.stp.StpApi.AddSerializationJobResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00002000) == 0x00002000)) {
                subBuilder = addSerializationJob_.toBuilder();
              }
              addSerializationJob_ = input.readMessage(com.impinj.stp.StpApi.AddSerializationJobResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addSerializationJob_);
                addSerializationJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00002000;
              break;
            }
            case 96346: {
              com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00004000) == 0x00004000)) {
                subBuilder = removeSerializationJob_.toBuilder();
              }
              removeSerializationJob_ = input.readMessage(com.impinj.stp.StpApi.RemoveSerializationJobResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(removeSerializationJob_);
                removeSerializationJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00004000;
              break;
            }
            case 96354: {
              com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00008000) == 0x00008000)) {
                subBuilder = addTidTableEntries_.toBuilder();
              }
              addTidTableEntries_ = input.readMessage(com.impinj.stp.StpApi.AddTIDTableEntriesResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addTidTableEntries_);
                addTidTableEntries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00008000;
              break;
            }
            case 96362: {
              com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00010000) == 0x00010000)) {
                subBuilder = addOrderedListEntries_.toBuilder();
              }
              addOrderedListEntries_ = input.readMessage(com.impinj.stp.StpApi.AddOrderedListEntriesResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addOrderedListEntries_);
                addOrderedListEntries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00010000;
              break;
            }
            case 96370: {
              com.impinj.stp.StpApi.SetInventoryJobResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00020000) == 0x00020000)) {
                subBuilder = setInventoryJob_.toBuilder();
              }
              setInventoryJob_ = input.readMessage(com.impinj.stp.StpApi.SetInventoryJobResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setInventoryJob_);
                setInventoryJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00020000;
              break;
            }
            case 96378: {
              com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00040000) == 0x00040000)) {
                subBuilder = setCartonContentsJob_.toBuilder();
              }
              setCartonContentsJob_ = input.readMessage(com.impinj.stp.StpApi.SetCartonContentsJobResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(setCartonContentsJob_);
                setCartonContentsJob_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00040000;
              break;
            }
            case 96386: {
              com.impinj.stp.StpApi.GetOperationDataResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00080000) == 0x00080000)) {
                subBuilder = getOperationData_.toBuilder();
              }
              getOperationData_ = input.readMessage(com.impinj.stp.StpApi.GetOperationDataResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getOperationData_);
                getOperationData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00080000;
              break;
            }
            case 96394: {
              com.impinj.stp.StpApi.AddLicenseKeyResp.Builder subBuilder = null;
              if (((bitField0_ & 0x00100000) == 0x00100000)) {
                subBuilder = addLicenseKey_.toBuilder();
              }
              addLicenseKey_ = input.readMessage(com.impinj.stp.StpApi.AddLicenseKeyResp.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addLicenseKey_);
                addLicenseKey_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00100000;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Response_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Response_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Response.class, com.impinj.stp.StpApi.Response.Builder.class);
    }

    public static com.google.protobuf.Parser<Response> PARSER =
        new com.google.protobuf.AbstractParser<Response>() {
      public Response parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Response(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Response> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.ConnectResp connect = 1;
    public static final int CONNECT_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.ConnectResp connect_;
    /**
     *
     * ************************************************************
     * **************************
     */
    public boolean hasConnect() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * ************************************************************
     * **************************
     */
    public com.impinj.stp.StpApi.ConnectResp getConnect() {
      return connect_;
    }
    /**
     *
     * ************************************************************
     * **************************
     */
    public com.impinj.stp.StpApi.ConnectRespOrBuilder getConnectOrBuilder() {
      return connect_;
    }

    // optional .Impinj.STP.GetVersionsReaderResp get_versions_reader = 2;
    public static final int GET_VERSIONS_READER_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.GetVersionsReaderResp getVersionsReader_;
    /**
     */
    public boolean hasGetVersionsReader() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetVersionsReaderResp getGetVersionsReader() {
      return getVersionsReader_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetVersionsReaderRespOrBuilder getGetVersionsReaderOrBuilder() {
      return getVersionsReader_;
    }

    // optional .Impinj.STP.StartResp start = 7;
    public static final int START_FIELD_NUMBER = 7;
    private com.impinj.stp.StpApi.StartResp start_;
    /**
     */
    public boolean hasStart() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.StartResp getStart() {
      return start_;
    }
    /**
     */
    public com.impinj.stp.StpApi.StartRespOrBuilder getStartOrBuilder() {
      return start_;
    }

    // optional .Impinj.STP.StopResp stop = 8;
    public static final int STOP_FIELD_NUMBER = 8;
    private com.impinj.stp.StpApi.StopResp stop_;
    /**
     */
    public boolean hasStop() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.StopResp getStop() {
      return stop_;
    }
    /**
     */
    public com.impinj.stp.StpApi.StopRespOrBuilder getStopOrBuilder() {
      return stop_;
    }

    // optional .Impinj.STP.InvalidResp invalid = 15;
    public static final int INVALID_FIELD_NUMBER = 15;
    private com.impinj.stp.StpApi.InvalidResp invalid_;
    /**
     */
    public boolean hasInvalid() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     */
    public com.impinj.stp.StpApi.InvalidResp getInvalid() {
      return invalid_;
    }
    /**
     */
    public com.impinj.stp.StpApi.InvalidRespOrBuilder getInvalidOrBuilder() {
      return invalid_;
    }

    // optional .Impinj.STP.GetDeviceStateResp get_device_state = 25;
    public static final int GET_DEVICE_STATE_FIELD_NUMBER = 25;
    private com.impinj.stp.StpApi.GetDeviceStateResp getDeviceState_;
    /**
     */
    public boolean hasGetDeviceState() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetDeviceStateResp getGetDeviceState() {
      return getDeviceState_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetDeviceStateRespOrBuilder getGetDeviceStateOrBuilder() {
      return getDeviceState_;
    }

    // optional .Impinj.STP.SetDeviceConfigResp set_device_config = 12032;
    public static final int SET_DEVICE_CONFIG_FIELD_NUMBER = 12032;
    private com.impinj.stp.StpApi.SetDeviceConfigResp setDeviceConfig_;
    /**
     */
    public boolean hasSetDeviceConfig() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetDeviceConfigResp getSetDeviceConfig() {
      return setDeviceConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetDeviceConfigRespOrBuilder getSetDeviceConfigOrBuilder() {
      return setDeviceConfig_;
    }

    // optional .Impinj.STP.GetDeviceConfigResp get_device_config = 12033;
    public static final int GET_DEVICE_CONFIG_FIELD_NUMBER = 12033;
    private com.impinj.stp.StpApi.GetDeviceConfigResp getDeviceConfig_;
    /**
     */
    public boolean hasGetDeviceConfig() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetDeviceConfigResp getGetDeviceConfig() {
      return getDeviceConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetDeviceConfigRespOrBuilder getGetDeviceConfigOrBuilder() {
      return getDeviceConfig_;
    }

    // optional .Impinj.STP.SetAntennaConfigResp set_antenna_config = 12034;
    public static final int SET_ANTENNA_CONFIG_FIELD_NUMBER = 12034;
    private com.impinj.stp.StpApi.SetAntennaConfigResp setAntennaConfig_;
    /**
     */
    public boolean hasSetAntennaConfig() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetAntennaConfigResp getSetAntennaConfig() {
      return setAntennaConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetAntennaConfigRespOrBuilder getSetAntennaConfigOrBuilder() {
      return setAntennaConfig_;
    }

    // optional .Impinj.STP.GetAntennaConfigResp get_antenna_config = 12035;
    public static final int GET_ANTENNA_CONFIG_FIELD_NUMBER = 12035;
    private com.impinj.stp.StpApi.GetAntennaConfigResp getAntennaConfig_;
    /**
     */
    public boolean hasGetAntennaConfig() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetAntennaConfigResp getGetAntennaConfig() {
      return getAntennaConfig_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetAntennaConfigRespOrBuilder getGetAntennaConfigOrBuilder() {
      return getAntennaConfig_;
    }

    // optional .Impinj.STP.EngageResp engage = 12036;
    public static final int ENGAGE_FIELD_NUMBER = 12036;
    private com.impinj.stp.StpApi.EngageResp engage_;
    /**
     */
    public boolean hasEngage() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     */
    public com.impinj.stp.StpApi.EngageResp getEngage() {
      return engage_;
    }
    /**
     */
    public com.impinj.stp.StpApi.EngageRespOrBuilder getEngageOrBuilder() {
      return engage_;
    }

    // optional .Impinj.STP.DisengageResp disengage = 12037;
    public static final int DISENGAGE_FIELD_NUMBER = 12037;
    private com.impinj.stp.StpApi.DisengageResp disengage_;
    /**
     */
    public boolean hasDisengage() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     */
    public com.impinj.stp.StpApi.DisengageResp getDisengage() {
      return disengage_;
    }
    /**
     */
    public com.impinj.stp.StpApi.DisengageRespOrBuilder getDisengageOrBuilder() {
      return disengage_;
    }

    // optional .Impinj.STP.SetOperationResultGPOResp set_operation_result_gpo = 12041;
    public static final int SET_OPERATION_RESULT_GPO_FIELD_NUMBER = 12041;
    private com.impinj.stp.StpApi.SetOperationResultGPOResp setOperationResultGpo_;
    /**
     *
     * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
     */
    public boolean hasSetOperationResultGpo() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     *
     * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
     */
    public com.impinj.stp.StpApi.SetOperationResultGPOResp getSetOperationResultGpo() {
      return setOperationResultGpo_;
    }
    /**
     *
     * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
     */
    public com.impinj.stp.StpApi.SetOperationResultGPORespOrBuilder getSetOperationResultGpoOrBuilder() {
      return setOperationResultGpo_;
    }

    // optional .Impinj.STP.AddSerializationJobResp add_serialization_job = 12042;
    public static final int ADD_SERIALIZATION_JOB_FIELD_NUMBER = 12042;
    private com.impinj.stp.StpApi.AddSerializationJobResp addSerializationJob_;
    /**
     */
    public boolean hasAddSerializationJob() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddSerializationJobResp getAddSerializationJob() {
      return addSerializationJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddSerializationJobRespOrBuilder getAddSerializationJobOrBuilder() {
      return addSerializationJob_;
    }

    // optional .Impinj.STP.RemoveSerializationJobResp remove_serialization_job = 12043;
    public static final int REMOVE_SERIALIZATION_JOB_FIELD_NUMBER = 12043;
    private com.impinj.stp.StpApi.RemoveSerializationJobResp removeSerializationJob_;
    /**
     */
    public boolean hasRemoveSerializationJob() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     */
    public com.impinj.stp.StpApi.RemoveSerializationJobResp getRemoveSerializationJob() {
      return removeSerializationJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.RemoveSerializationJobRespOrBuilder getRemoveSerializationJobOrBuilder() {
      return removeSerializationJob_;
    }

    // optional .Impinj.STP.AddTIDTableEntriesResp add_tid_table_entries = 12044;
    public static final int ADD_TID_TABLE_ENTRIES_FIELD_NUMBER = 12044;
    private com.impinj.stp.StpApi.AddTIDTableEntriesResp addTidTableEntries_;
    /**
     */
    public boolean hasAddTidTableEntries() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddTIDTableEntriesResp getAddTidTableEntries() {
      return addTidTableEntries_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddTIDTableEntriesRespOrBuilder getAddTidTableEntriesOrBuilder() {
      return addTidTableEntries_;
    }

    // optional .Impinj.STP.AddOrderedListEntriesResp add_ordered_list_entries = 12045;
    public static final int ADD_ORDERED_LIST_ENTRIES_FIELD_NUMBER = 12045;
    private com.impinj.stp.StpApi.AddOrderedListEntriesResp addOrderedListEntries_;
    /**
     */
    public boolean hasAddOrderedListEntries() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddOrderedListEntriesResp getAddOrderedListEntries() {
      return addOrderedListEntries_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddOrderedListEntriesRespOrBuilder getAddOrderedListEntriesOrBuilder() {
      return addOrderedListEntries_;
    }

    // optional .Impinj.STP.SetInventoryJobResp set_inventory_job = 12046;
    public static final int SET_INVENTORY_JOB_FIELD_NUMBER = 12046;
    private com.impinj.stp.StpApi.SetInventoryJobResp setInventoryJob_;
    /**
     */
    public boolean hasSetInventoryJob() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetInventoryJobResp getSetInventoryJob() {
      return setInventoryJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetInventoryJobRespOrBuilder getSetInventoryJobOrBuilder() {
      return setInventoryJob_;
    }

    // optional .Impinj.STP.SetCartonContentsJobResp set_carton_contents_job = 12047;
    public static final int SET_CARTON_CONTENTS_JOB_FIELD_NUMBER = 12047;
    private com.impinj.stp.StpApi.SetCartonContentsJobResp setCartonContentsJob_;
    /**
     */
    public boolean hasSetCartonContentsJob() {
      return ((bitField0_ & 0x00040000) == 0x00040000);
    }
    /**
     */
    public com.impinj.stp.StpApi.SetCartonContentsJobResp getSetCartonContentsJob() {
      return setCartonContentsJob_;
    }
    /**
     */
    public com.impinj.stp.StpApi.SetCartonContentsJobRespOrBuilder getSetCartonContentsJobOrBuilder() {
      return setCartonContentsJob_;
    }

    // optional .Impinj.STP.GetOperationDataResp get_operation_data = 12048;
    public static final int GET_OPERATION_DATA_FIELD_NUMBER = 12048;
    private com.impinj.stp.StpApi.GetOperationDataResp getOperationData_;
    /**
     */
    public boolean hasGetOperationData() {
      return ((bitField0_ & 0x00080000) == 0x00080000);
    }
    /**
     */
    public com.impinj.stp.StpApi.GetOperationDataResp getGetOperationData() {
      return getOperationData_;
    }
    /**
     */
    public com.impinj.stp.StpApi.GetOperationDataRespOrBuilder getGetOperationDataOrBuilder() {
      return getOperationData_;
    }

    // optional .Impinj.STP.AddLicenseKeyResp add_license_key = 12049;
    public static final int ADD_LICENSE_KEY_FIELD_NUMBER = 12049;
    private com.impinj.stp.StpApi.AddLicenseKeyResp addLicenseKey_;
    /**
     */
    public boolean hasAddLicenseKey() {
      return ((bitField0_ & 0x00100000) == 0x00100000);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddLicenseKeyResp getAddLicenseKey() {
      return addLicenseKey_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddLicenseKeyRespOrBuilder getAddLicenseKeyOrBuilder() {
      return addLicenseKey_;
    }

    private void initFields() {
      connect_ = com.impinj.stp.StpApi.ConnectResp.getDefaultInstance();
      getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderResp.getDefaultInstance();
      start_ = com.impinj.stp.StpApi.StartResp.getDefaultInstance();
      stop_ = com.impinj.stp.StpApi.StopResp.getDefaultInstance();
      invalid_ = com.impinj.stp.StpApi.InvalidResp.getDefaultInstance();
      getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateResp.getDefaultInstance();
      setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigResp.getDefaultInstance();
      getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigResp.getDefaultInstance();
      setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigResp.getDefaultInstance();
      getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigResp.getDefaultInstance();
      engage_ = com.impinj.stp.StpApi.EngageResp.getDefaultInstance();
      disengage_ = com.impinj.stp.StpApi.DisengageResp.getDefaultInstance();
      setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOResp.getDefaultInstance();
      addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobResp.getDefaultInstance();
      removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobResp.getDefaultInstance();
      addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesResp.getDefaultInstance();
      addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesResp.getDefaultInstance();
      setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobResp.getDefaultInstance();
      setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobResp.getDefaultInstance();
      getOperationData_ = com.impinj.stp.StpApi.GetOperationDataResp.getDefaultInstance();
      addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyResp.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasConnect()) {
        if (!getConnect().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasGetVersionsReader()) {
        if (!getGetVersionsReader().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasStart()) {
        if (!getStart().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasStop()) {
        if (!getStop().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasGetDeviceState()) {
        if (!getGetDeviceState().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSetDeviceConfig()) {
        if (!getSetDeviceConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasGetDeviceConfig()) {
        if (!getGetDeviceConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSetAntennaConfig()) {
        if (!getSetAntennaConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasGetAntennaConfig()) {
        if (!getGetAntennaConfig().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasEngage()) {
        if (!getEngage().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasDisengage()) {
        if (!getDisengage().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSetOperationResultGpo()) {
        if (!getSetOperationResultGpo().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddSerializationJob()) {
        if (!getAddSerializationJob().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasRemoveSerializationJob()) {
        if (!getRemoveSerializationJob().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddTidTableEntries()) {
        if (!getAddTidTableEntries().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddOrderedListEntries()) {
        if (!getAddOrderedListEntries().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSetInventoryJob()) {
        if (!getSetInventoryJob().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSetCartonContentsJob()) {
        if (!getSetCartonContentsJob().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasGetOperationData()) {
        if (!getGetOperationData().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasAddLicenseKey()) {
        if (!getAddLicenseKey().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, connect_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getVersionsReader_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(7, start_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(8, stop_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(15, invalid_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(25, getDeviceState_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(12032, setDeviceConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(12033, getDeviceConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(12034, setAntennaConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(12035, getAntennaConfig_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(12036, engage_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeMessage(12037, disengage_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeMessage(12041, setOperationResultGpo_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeMessage(12042, addSerializationJob_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeMessage(12043, removeSerializationJob_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeMessage(12044, addTidTableEntries_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeMessage(12045, addOrderedListEntries_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeMessage(12046, setInventoryJob_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeMessage(12047, setCartonContentsJob_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeMessage(12048, getOperationData_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        output.writeMessage(12049, addLicenseKey_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, connect_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getVersionsReader_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, start_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, stop_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, invalid_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(25, getDeviceState_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12032, setDeviceConfig_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12033, getDeviceConfig_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12034, setAntennaConfig_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12035, getAntennaConfig_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12036, engage_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12037, disengage_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12041, setOperationResultGpo_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12042, addSerializationJob_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12043, removeSerializationJob_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12044, addTidTableEntries_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12045, addOrderedListEntries_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12046, setInventoryJob_);
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12047, setCartonContentsJob_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12048, getOperationData_);
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12049, addLicenseKey_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Response parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Response parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Response parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Response parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Response parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Response parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Response parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Response parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Response parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Response parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Response prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Response}
     *
     * From Impinj Device to Host
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.ResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Response_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Response.class, com.impinj.stp.StpApi.Response.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Response.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getConnectFieldBuilder();
          getGetVersionsReaderFieldBuilder();
          getStartFieldBuilder();
          getStopFieldBuilder();
          getInvalidFieldBuilder();
          getGetDeviceStateFieldBuilder();
          getSetDeviceConfigFieldBuilder();
          getGetDeviceConfigFieldBuilder();
          getSetAntennaConfigFieldBuilder();
          getGetAntennaConfigFieldBuilder();
          getEngageFieldBuilder();
          getDisengageFieldBuilder();
          getSetOperationResultGpoFieldBuilder();
          getAddSerializationJobFieldBuilder();
          getRemoveSerializationJobFieldBuilder();
          getAddTidTableEntriesFieldBuilder();
          getAddOrderedListEntriesFieldBuilder();
          getSetInventoryJobFieldBuilder();
          getSetCartonContentsJobFieldBuilder();
          getGetOperationDataFieldBuilder();
          getAddLicenseKeyFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (connectBuilder_ == null) {
          connect_ = com.impinj.stp.StpApi.ConnectResp.getDefaultInstance();
        } else {
          connectBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderResp.getDefaultInstance();
        } else {
          getVersionsReaderBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (startBuilder_ == null) {
          start_ = com.impinj.stp.StpApi.StartResp.getDefaultInstance();
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (stopBuilder_ == null) {
          stop_ = com.impinj.stp.StpApi.StopResp.getDefaultInstance();
        } else {
          stopBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (invalidBuilder_ == null) {
          invalid_ = com.impinj.stp.StpApi.InvalidResp.getDefaultInstance();
        } else {
          invalidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (getDeviceStateBuilder_ == null) {
          getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateResp.getDefaultInstance();
        } else {
          getDeviceStateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigResp.getDefaultInstance();
        } else {
          setDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigResp.getDefaultInstance();
        } else {
          getDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigResp.getDefaultInstance();
        } else {
          setAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigResp.getDefaultInstance();
        } else {
          getAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (engageBuilder_ == null) {
          engage_ = com.impinj.stp.StpApi.EngageResp.getDefaultInstance();
        } else {
          engageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (disengageBuilder_ == null) {
          disengage_ = com.impinj.stp.StpApi.DisengageResp.getDefaultInstance();
        } else {
          disengageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOResp.getDefaultInstance();
        } else {
          setOperationResultGpoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        if (addSerializationJobBuilder_ == null) {
          addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobResp.getDefaultInstance();
        } else {
          addSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobResp.getDefaultInstance();
        } else {
          removeSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesResp.getDefaultInstance();
        } else {
          addTidTableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesResp.getDefaultInstance();
        } else {
          addOrderedListEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        if (setInventoryJobBuilder_ == null) {
          setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobResp.getDefaultInstance();
        } else {
          setInventoryJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobResp.getDefaultInstance();
        } else {
          setCartonContentsJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00040000);
        if (getOperationDataBuilder_ == null) {
          getOperationData_ = com.impinj.stp.StpApi.GetOperationDataResp.getDefaultInstance();
        } else {
          getOperationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyResp.getDefaultInstance();
        } else {
          addLicenseKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00100000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Response_descriptor;
      }

      public com.impinj.stp.StpApi.Response getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Response.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Response build() {
        com.impinj.stp.StpApi.Response result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Response buildPartial() {
        com.impinj.stp.StpApi.Response result = new com.impinj.stp.StpApi.Response(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (connectBuilder_ == null) {
          result.connect_ = connect_;
        } else {
          result.connect_ = connectBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (getVersionsReaderBuilder_ == null) {
          result.getVersionsReader_ = getVersionsReader_;
        } else {
          result.getVersionsReader_ = getVersionsReaderBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (startBuilder_ == null) {
          result.start_ = start_;
        } else {
          result.start_ = startBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (stopBuilder_ == null) {
          result.stop_ = stop_;
        } else {
          result.stop_ = stopBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (invalidBuilder_ == null) {
          result.invalid_ = invalid_;
        } else {
          result.invalid_ = invalidBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (getDeviceStateBuilder_ == null) {
          result.getDeviceState_ = getDeviceState_;
        } else {
          result.getDeviceState_ = getDeviceStateBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (setDeviceConfigBuilder_ == null) {
          result.setDeviceConfig_ = setDeviceConfig_;
        } else {
          result.setDeviceConfig_ = setDeviceConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (getDeviceConfigBuilder_ == null) {
          result.getDeviceConfig_ = getDeviceConfig_;
        } else {
          result.getDeviceConfig_ = getDeviceConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (setAntennaConfigBuilder_ == null) {
          result.setAntennaConfig_ = setAntennaConfig_;
        } else {
          result.setAntennaConfig_ = setAntennaConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (getAntennaConfigBuilder_ == null) {
          result.getAntennaConfig_ = getAntennaConfig_;
        } else {
          result.getAntennaConfig_ = getAntennaConfigBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (engageBuilder_ == null) {
          result.engage_ = engage_;
        } else {
          result.engage_ = engageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        if (disengageBuilder_ == null) {
          result.disengage_ = disengage_;
        } else {
          result.disengage_ = disengageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        if (setOperationResultGpoBuilder_ == null) {
          result.setOperationResultGpo_ = setOperationResultGpo_;
        } else {
          result.setOperationResultGpo_ = setOperationResultGpoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        if (addSerializationJobBuilder_ == null) {
          result.addSerializationJob_ = addSerializationJob_;
        } else {
          result.addSerializationJob_ = addSerializationJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        if (removeSerializationJobBuilder_ == null) {
          result.removeSerializationJob_ = removeSerializationJob_;
        } else {
          result.removeSerializationJob_ = removeSerializationJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        if (addTidTableEntriesBuilder_ == null) {
          result.addTidTableEntries_ = addTidTableEntries_;
        } else {
          result.addTidTableEntries_ = addTidTableEntriesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        if (addOrderedListEntriesBuilder_ == null) {
          result.addOrderedListEntries_ = addOrderedListEntries_;
        } else {
          result.addOrderedListEntries_ = addOrderedListEntriesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00020000;
        }
        if (setInventoryJobBuilder_ == null) {
          result.setInventoryJob_ = setInventoryJob_;
        } else {
          result.setInventoryJob_ = setInventoryJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
          to_bitField0_ |= 0x00040000;
        }
        if (setCartonContentsJobBuilder_ == null) {
          result.setCartonContentsJob_ = setCartonContentsJob_;
        } else {
          result.setCartonContentsJob_ = setCartonContentsJobBuilder_.build();
        }
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00080000;
        }
        if (getOperationDataBuilder_ == null) {
          result.getOperationData_ = getOperationData_;
        } else {
          result.getOperationData_ = getOperationDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00100000;
        }
        if (addLicenseKeyBuilder_ == null) {
          result.addLicenseKey_ = addLicenseKey_;
        } else {
          result.addLicenseKey_ = addLicenseKeyBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Response) {
          return mergeFrom((com.impinj.stp.StpApi.Response)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Response other) {
        if (other == com.impinj.stp.StpApi.Response.getDefaultInstance()) return this;
        if (other.hasConnect()) {
          mergeConnect(other.getConnect());
        }
        if (other.hasGetVersionsReader()) {
          mergeGetVersionsReader(other.getGetVersionsReader());
        }
        if (other.hasStart()) {
          mergeStart(other.getStart());
        }
        if (other.hasStop()) {
          mergeStop(other.getStop());
        }
        if (other.hasInvalid()) {
          mergeInvalid(other.getInvalid());
        }
        if (other.hasGetDeviceState()) {
          mergeGetDeviceState(other.getGetDeviceState());
        }
        if (other.hasSetDeviceConfig()) {
          mergeSetDeviceConfig(other.getSetDeviceConfig());
        }
        if (other.hasGetDeviceConfig()) {
          mergeGetDeviceConfig(other.getGetDeviceConfig());
        }
        if (other.hasSetAntennaConfig()) {
          mergeSetAntennaConfig(other.getSetAntennaConfig());
        }
        if (other.hasGetAntennaConfig()) {
          mergeGetAntennaConfig(other.getGetAntennaConfig());
        }
        if (other.hasEngage()) {
          mergeEngage(other.getEngage());
        }
        if (other.hasDisengage()) {
          mergeDisengage(other.getDisengage());
        }
        if (other.hasSetOperationResultGpo()) {
          mergeSetOperationResultGpo(other.getSetOperationResultGpo());
        }
        if (other.hasAddSerializationJob()) {
          mergeAddSerializationJob(other.getAddSerializationJob());
        }
        if (other.hasRemoveSerializationJob()) {
          mergeRemoveSerializationJob(other.getRemoveSerializationJob());
        }
        if (other.hasAddTidTableEntries()) {
          mergeAddTidTableEntries(other.getAddTidTableEntries());
        }
        if (other.hasAddOrderedListEntries()) {
          mergeAddOrderedListEntries(other.getAddOrderedListEntries());
        }
        if (other.hasSetInventoryJob()) {
          mergeSetInventoryJob(other.getSetInventoryJob());
        }
        if (other.hasSetCartonContentsJob()) {
          mergeSetCartonContentsJob(other.getSetCartonContentsJob());
        }
        if (other.hasGetOperationData()) {
          mergeGetOperationData(other.getGetOperationData());
        }
        if (other.hasAddLicenseKey()) {
          mergeAddLicenseKey(other.getAddLicenseKey());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasConnect()) {
          if (!getConnect().isInitialized()) {
            
            return false;
          }
        }
        if (hasGetVersionsReader()) {
          if (!getGetVersionsReader().isInitialized()) {
            
            return false;
          }
        }
        if (hasStart()) {
          if (!getStart().isInitialized()) {
            
            return false;
          }
        }
        if (hasStop()) {
          if (!getStop().isInitialized()) {
            
            return false;
          }
        }
        if (hasGetDeviceState()) {
          if (!getGetDeviceState().isInitialized()) {
            
            return false;
          }
        }
        if (hasSetDeviceConfig()) {
          if (!getSetDeviceConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasGetDeviceConfig()) {
          if (!getGetDeviceConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasSetAntennaConfig()) {
          if (!getSetAntennaConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasGetAntennaConfig()) {
          if (!getGetAntennaConfig().isInitialized()) {
            
            return false;
          }
        }
        if (hasEngage()) {
          if (!getEngage().isInitialized()) {
            
            return false;
          }
        }
        if (hasDisengage()) {
          if (!getDisengage().isInitialized()) {
            
            return false;
          }
        }
        if (hasSetOperationResultGpo()) {
          if (!getSetOperationResultGpo().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddSerializationJob()) {
          if (!getAddSerializationJob().isInitialized()) {
            
            return false;
          }
        }
        if (hasRemoveSerializationJob()) {
          if (!getRemoveSerializationJob().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddTidTableEntries()) {
          if (!getAddTidTableEntries().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddOrderedListEntries()) {
          if (!getAddOrderedListEntries().isInitialized()) {
            
            return false;
          }
        }
        if (hasSetInventoryJob()) {
          if (!getSetInventoryJob().isInitialized()) {
            
            return false;
          }
        }
        if (hasSetCartonContentsJob()) {
          if (!getSetCartonContentsJob().isInitialized()) {
            
            return false;
          }
        }
        if (hasGetOperationData()) {
          if (!getGetOperationData().isInitialized()) {
            
            return false;
          }
        }
        if (hasAddLicenseKey()) {
          if (!getAddLicenseKey().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Response parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Response) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.ConnectResp connect = 1;
      private com.impinj.stp.StpApi.ConnectResp connect_ = com.impinj.stp.StpApi.ConnectResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.ConnectResp, com.impinj.stp.StpApi.ConnectResp.Builder, com.impinj.stp.StpApi.ConnectRespOrBuilder> connectBuilder_;
      /**
       *
       * ************************************************************
       * **************************
       */
      public boolean hasConnect() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      public com.impinj.stp.StpApi.ConnectResp getConnect() {
        if (connectBuilder_ == null) {
          return connect_;
        } else {
          return connectBuilder_.getMessage();
        }
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      public Builder setConnect(com.impinj.stp.StpApi.ConnectResp value) {
        if (connectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          connect_ = value;
          onChanged();
        } else {
          connectBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      public Builder setConnect(
          com.impinj.stp.StpApi.ConnectResp.Builder builderForValue) {
        if (connectBuilder_ == null) {
          connect_ = builderForValue.build();
          onChanged();
        } else {
          connectBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      public Builder mergeConnect(com.impinj.stp.StpApi.ConnectResp value) {
        if (connectBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              connect_ != com.impinj.stp.StpApi.ConnectResp.getDefaultInstance()) {
            connect_ =
              com.impinj.stp.StpApi.ConnectResp.newBuilder(connect_).mergeFrom(value).buildPartial();
          } else {
            connect_ = value;
          }
          onChanged();
        } else {
          connectBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      public Builder clearConnect() {
        if (connectBuilder_ == null) {
          connect_ = com.impinj.stp.StpApi.ConnectResp.getDefaultInstance();
          onChanged();
        } else {
          connectBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      public com.impinj.stp.StpApi.ConnectResp.Builder getConnectBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getConnectFieldBuilder().getBuilder();
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      public com.impinj.stp.StpApi.ConnectRespOrBuilder getConnectOrBuilder() {
        if (connectBuilder_ != null) {
          return connectBuilder_.getMessageOrBuilder();
        } else {
          return connect_;
        }
      }
      /**
       *
       * ************************************************************
       * **************************
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.ConnectResp, com.impinj.stp.StpApi.ConnectResp.Builder, com.impinj.stp.StpApi.ConnectRespOrBuilder> 
          getConnectFieldBuilder() {
        if (connectBuilder_ == null) {
          connectBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.ConnectResp, com.impinj.stp.StpApi.ConnectResp.Builder, com.impinj.stp.StpApi.ConnectRespOrBuilder>(
                  connect_,
                  getParentForChildren(),
                  isClean());
          connect_ = null;
        }
        return connectBuilder_;
      }

      // optional .Impinj.STP.GetVersionsReaderResp get_versions_reader = 2;
      private com.impinj.stp.StpApi.GetVersionsReaderResp getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetVersionsReaderResp, com.impinj.stp.StpApi.GetVersionsReaderResp.Builder, com.impinj.stp.StpApi.GetVersionsReaderRespOrBuilder> getVersionsReaderBuilder_;
      /**
       */
      public boolean hasGetVersionsReader() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetVersionsReaderResp getGetVersionsReader() {
        if (getVersionsReaderBuilder_ == null) {
          return getVersionsReader_;
        } else {
          return getVersionsReaderBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetVersionsReader(com.impinj.stp.StpApi.GetVersionsReaderResp value) {
        if (getVersionsReaderBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getVersionsReader_ = value;
          onChanged();
        } else {
          getVersionsReaderBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setGetVersionsReader(
          com.impinj.stp.StpApi.GetVersionsReaderResp.Builder builderForValue) {
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReader_ = builderForValue.build();
          onChanged();
        } else {
          getVersionsReaderBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeGetVersionsReader(com.impinj.stp.StpApi.GetVersionsReaderResp value) {
        if (getVersionsReaderBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              getVersionsReader_ != com.impinj.stp.StpApi.GetVersionsReaderResp.getDefaultInstance()) {
            getVersionsReader_ =
              com.impinj.stp.StpApi.GetVersionsReaderResp.newBuilder(getVersionsReader_).mergeFrom(value).buildPartial();
          } else {
            getVersionsReader_ = value;
          }
          onChanged();
        } else {
          getVersionsReaderBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearGetVersionsReader() {
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReader_ = com.impinj.stp.StpApi.GetVersionsReaderResp.getDefaultInstance();
          onChanged();
        } else {
          getVersionsReaderBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetVersionsReaderResp.Builder getGetVersionsReaderBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getGetVersionsReaderFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetVersionsReaderRespOrBuilder getGetVersionsReaderOrBuilder() {
        if (getVersionsReaderBuilder_ != null) {
          return getVersionsReaderBuilder_.getMessageOrBuilder();
        } else {
          return getVersionsReader_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetVersionsReaderResp, com.impinj.stp.StpApi.GetVersionsReaderResp.Builder, com.impinj.stp.StpApi.GetVersionsReaderRespOrBuilder> 
          getGetVersionsReaderFieldBuilder() {
        if (getVersionsReaderBuilder_ == null) {
          getVersionsReaderBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetVersionsReaderResp, com.impinj.stp.StpApi.GetVersionsReaderResp.Builder, com.impinj.stp.StpApi.GetVersionsReaderRespOrBuilder>(
                  getVersionsReader_,
                  getParentForChildren(),
                  isClean());
          getVersionsReader_ = null;
        }
        return getVersionsReaderBuilder_;
      }

      // optional .Impinj.STP.StartResp start = 7;
      private com.impinj.stp.StpApi.StartResp start_ = com.impinj.stp.StpApi.StartResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StartResp, com.impinj.stp.StpApi.StartResp.Builder, com.impinj.stp.StpApi.StartRespOrBuilder> startBuilder_;
      /**
       */
      public boolean hasStart() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.StartResp getStart() {
        if (startBuilder_ == null) {
          return start_;
        } else {
          return startBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setStart(com.impinj.stp.StpApi.StartResp value) {
        if (startBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          start_ = value;
          onChanged();
        } else {
          startBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder setStart(
          com.impinj.stp.StpApi.StartResp.Builder builderForValue) {
        if (startBuilder_ == null) {
          start_ = builderForValue.build();
          onChanged();
        } else {
          startBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder mergeStart(com.impinj.stp.StpApi.StartResp value) {
        if (startBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              start_ != com.impinj.stp.StpApi.StartResp.getDefaultInstance()) {
            start_ =
              com.impinj.stp.StpApi.StartResp.newBuilder(start_).mergeFrom(value).buildPartial();
          } else {
            start_ = value;
          }
          onChanged();
        } else {
          startBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder clearStart() {
        if (startBuilder_ == null) {
          start_ = com.impinj.stp.StpApi.StartResp.getDefaultInstance();
          onChanged();
        } else {
          startBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.StartResp.Builder getStartBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getStartFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.StartRespOrBuilder getStartOrBuilder() {
        if (startBuilder_ != null) {
          return startBuilder_.getMessageOrBuilder();
        } else {
          return start_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StartResp, com.impinj.stp.StpApi.StartResp.Builder, com.impinj.stp.StpApi.StartRespOrBuilder> 
          getStartFieldBuilder() {
        if (startBuilder_ == null) {
          startBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.StartResp, com.impinj.stp.StpApi.StartResp.Builder, com.impinj.stp.StpApi.StartRespOrBuilder>(
                  start_,
                  getParentForChildren(),
                  isClean());
          start_ = null;
        }
        return startBuilder_;
      }

      // optional .Impinj.STP.StopResp stop = 8;
      private com.impinj.stp.StpApi.StopResp stop_ = com.impinj.stp.StpApi.StopResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StopResp, com.impinj.stp.StpApi.StopResp.Builder, com.impinj.stp.StpApi.StopRespOrBuilder> stopBuilder_;
      /**
       */
      public boolean hasStop() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.StopResp getStop() {
        if (stopBuilder_ == null) {
          return stop_;
        } else {
          return stopBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setStop(com.impinj.stp.StpApi.StopResp value) {
        if (stopBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          stop_ = value;
          onChanged();
        } else {
          stopBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setStop(
          com.impinj.stp.StpApi.StopResp.Builder builderForValue) {
        if (stopBuilder_ == null) {
          stop_ = builderForValue.build();
          onChanged();
        } else {
          stopBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeStop(com.impinj.stp.StpApi.StopResp value) {
        if (stopBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              stop_ != com.impinj.stp.StpApi.StopResp.getDefaultInstance()) {
            stop_ =
              com.impinj.stp.StpApi.StopResp.newBuilder(stop_).mergeFrom(value).buildPartial();
          } else {
            stop_ = value;
          }
          onChanged();
        } else {
          stopBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearStop() {
        if (stopBuilder_ == null) {
          stop_ = com.impinj.stp.StpApi.StopResp.getDefaultInstance();
          onChanged();
        } else {
          stopBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.StopResp.Builder getStopBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getStopFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.StopRespOrBuilder getStopOrBuilder() {
        if (stopBuilder_ != null) {
          return stopBuilder_.getMessageOrBuilder();
        } else {
          return stop_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.StopResp, com.impinj.stp.StpApi.StopResp.Builder, com.impinj.stp.StpApi.StopRespOrBuilder> 
          getStopFieldBuilder() {
        if (stopBuilder_ == null) {
          stopBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.StopResp, com.impinj.stp.StpApi.StopResp.Builder, com.impinj.stp.StpApi.StopRespOrBuilder>(
                  stop_,
                  getParentForChildren(),
                  isClean());
          stop_ = null;
        }
        return stopBuilder_;
      }

      // optional .Impinj.STP.InvalidResp invalid = 15;
      private com.impinj.stp.StpApi.InvalidResp invalid_ = com.impinj.stp.StpApi.InvalidResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.InvalidResp, com.impinj.stp.StpApi.InvalidResp.Builder, com.impinj.stp.StpApi.InvalidRespOrBuilder> invalidBuilder_;
      /**
       */
      public boolean hasInvalid() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       */
      public com.impinj.stp.StpApi.InvalidResp getInvalid() {
        if (invalidBuilder_ == null) {
          return invalid_;
        } else {
          return invalidBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setInvalid(com.impinj.stp.StpApi.InvalidResp value) {
        if (invalidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          invalid_ = value;
          onChanged();
        } else {
          invalidBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder setInvalid(
          com.impinj.stp.StpApi.InvalidResp.Builder builderForValue) {
        if (invalidBuilder_ == null) {
          invalid_ = builderForValue.build();
          onChanged();
        } else {
          invalidBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder mergeInvalid(com.impinj.stp.StpApi.InvalidResp value) {
        if (invalidBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              invalid_ != com.impinj.stp.StpApi.InvalidResp.getDefaultInstance()) {
            invalid_ =
              com.impinj.stp.StpApi.InvalidResp.newBuilder(invalid_).mergeFrom(value).buildPartial();
          } else {
            invalid_ = value;
          }
          onChanged();
        } else {
          invalidBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       */
      public Builder clearInvalid() {
        if (invalidBuilder_ == null) {
          invalid_ = com.impinj.stp.StpApi.InvalidResp.getDefaultInstance();
          onChanged();
        } else {
          invalidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.InvalidResp.Builder getInvalidBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getInvalidFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.InvalidRespOrBuilder getInvalidOrBuilder() {
        if (invalidBuilder_ != null) {
          return invalidBuilder_.getMessageOrBuilder();
        } else {
          return invalid_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.InvalidResp, com.impinj.stp.StpApi.InvalidResp.Builder, com.impinj.stp.StpApi.InvalidRespOrBuilder> 
          getInvalidFieldBuilder() {
        if (invalidBuilder_ == null) {
          invalidBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.InvalidResp, com.impinj.stp.StpApi.InvalidResp.Builder, com.impinj.stp.StpApi.InvalidRespOrBuilder>(
                  invalid_,
                  getParentForChildren(),
                  isClean());
          invalid_ = null;
        }
        return invalidBuilder_;
      }

      // optional .Impinj.STP.GetDeviceStateResp get_device_state = 25;
      private com.impinj.stp.StpApi.GetDeviceStateResp getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceStateResp, com.impinj.stp.StpApi.GetDeviceStateResp.Builder, com.impinj.stp.StpApi.GetDeviceStateRespOrBuilder> getDeviceStateBuilder_;
      /**
       */
      public boolean hasGetDeviceState() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceStateResp getGetDeviceState() {
        if (getDeviceStateBuilder_ == null) {
          return getDeviceState_;
        } else {
          return getDeviceStateBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetDeviceState(com.impinj.stp.StpApi.GetDeviceStateResp value) {
        if (getDeviceStateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getDeviceState_ = value;
          onChanged();
        } else {
          getDeviceStateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder setGetDeviceState(
          com.impinj.stp.StpApi.GetDeviceStateResp.Builder builderForValue) {
        if (getDeviceStateBuilder_ == null) {
          getDeviceState_ = builderForValue.build();
          onChanged();
        } else {
          getDeviceStateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder mergeGetDeviceState(com.impinj.stp.StpApi.GetDeviceStateResp value) {
        if (getDeviceStateBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              getDeviceState_ != com.impinj.stp.StpApi.GetDeviceStateResp.getDefaultInstance()) {
            getDeviceState_ =
              com.impinj.stp.StpApi.GetDeviceStateResp.newBuilder(getDeviceState_).mergeFrom(value).buildPartial();
          } else {
            getDeviceState_ = value;
          }
          onChanged();
        } else {
          getDeviceStateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       */
      public Builder clearGetDeviceState() {
        if (getDeviceStateBuilder_ == null) {
          getDeviceState_ = com.impinj.stp.StpApi.GetDeviceStateResp.getDefaultInstance();
          onChanged();
        } else {
          getDeviceStateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceStateResp.Builder getGetDeviceStateBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getGetDeviceStateFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceStateRespOrBuilder getGetDeviceStateOrBuilder() {
        if (getDeviceStateBuilder_ != null) {
          return getDeviceStateBuilder_.getMessageOrBuilder();
        } else {
          return getDeviceState_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceStateResp, com.impinj.stp.StpApi.GetDeviceStateResp.Builder, com.impinj.stp.StpApi.GetDeviceStateRespOrBuilder> 
          getGetDeviceStateFieldBuilder() {
        if (getDeviceStateBuilder_ == null) {
          getDeviceStateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetDeviceStateResp, com.impinj.stp.StpApi.GetDeviceStateResp.Builder, com.impinj.stp.StpApi.GetDeviceStateRespOrBuilder>(
                  getDeviceState_,
                  getParentForChildren(),
                  isClean());
          getDeviceState_ = null;
        }
        return getDeviceStateBuilder_;
      }

      // optional .Impinj.STP.SetDeviceConfigResp set_device_config = 12032;
      private com.impinj.stp.StpApi.SetDeviceConfigResp setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetDeviceConfigResp, com.impinj.stp.StpApi.SetDeviceConfigResp.Builder, com.impinj.stp.StpApi.SetDeviceConfigRespOrBuilder> setDeviceConfigBuilder_;
      /**
       */
      public boolean hasSetDeviceConfig() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetDeviceConfigResp getSetDeviceConfig() {
        if (setDeviceConfigBuilder_ == null) {
          return setDeviceConfig_;
        } else {
          return setDeviceConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetDeviceConfig(com.impinj.stp.StpApi.SetDeviceConfigResp value) {
        if (setDeviceConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setDeviceConfig_ = value;
          onChanged();
        } else {
          setDeviceConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder setSetDeviceConfig(
          com.impinj.stp.StpApi.SetDeviceConfigResp.Builder builderForValue) {
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfig_ = builderForValue.build();
          onChanged();
        } else {
          setDeviceConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder mergeSetDeviceConfig(com.impinj.stp.StpApi.SetDeviceConfigResp value) {
        if (setDeviceConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              setDeviceConfig_ != com.impinj.stp.StpApi.SetDeviceConfigResp.getDefaultInstance()) {
            setDeviceConfig_ =
              com.impinj.stp.StpApi.SetDeviceConfigResp.newBuilder(setDeviceConfig_).mergeFrom(value).buildPartial();
          } else {
            setDeviceConfig_ = value;
          }
          onChanged();
        } else {
          setDeviceConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       */
      public Builder clearSetDeviceConfig() {
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfig_ = com.impinj.stp.StpApi.SetDeviceConfigResp.getDefaultInstance();
          onChanged();
        } else {
          setDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetDeviceConfigResp.Builder getSetDeviceConfigBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getSetDeviceConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetDeviceConfigRespOrBuilder getSetDeviceConfigOrBuilder() {
        if (setDeviceConfigBuilder_ != null) {
          return setDeviceConfigBuilder_.getMessageOrBuilder();
        } else {
          return setDeviceConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetDeviceConfigResp, com.impinj.stp.StpApi.SetDeviceConfigResp.Builder, com.impinj.stp.StpApi.SetDeviceConfigRespOrBuilder> 
          getSetDeviceConfigFieldBuilder() {
        if (setDeviceConfigBuilder_ == null) {
          setDeviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetDeviceConfigResp, com.impinj.stp.StpApi.SetDeviceConfigResp.Builder, com.impinj.stp.StpApi.SetDeviceConfigRespOrBuilder>(
                  setDeviceConfig_,
                  getParentForChildren(),
                  isClean());
          setDeviceConfig_ = null;
        }
        return setDeviceConfigBuilder_;
      }

      // optional .Impinj.STP.GetDeviceConfigResp get_device_config = 12033;
      private com.impinj.stp.StpApi.GetDeviceConfigResp getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceConfigResp, com.impinj.stp.StpApi.GetDeviceConfigResp.Builder, com.impinj.stp.StpApi.GetDeviceConfigRespOrBuilder> getDeviceConfigBuilder_;
      /**
       */
      public boolean hasGetDeviceConfig() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceConfigResp getGetDeviceConfig() {
        if (getDeviceConfigBuilder_ == null) {
          return getDeviceConfig_;
        } else {
          return getDeviceConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetDeviceConfig(com.impinj.stp.StpApi.GetDeviceConfigResp value) {
        if (getDeviceConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getDeviceConfig_ = value;
          onChanged();
        } else {
          getDeviceConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder setGetDeviceConfig(
          com.impinj.stp.StpApi.GetDeviceConfigResp.Builder builderForValue) {
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfig_ = builderForValue.build();
          onChanged();
        } else {
          getDeviceConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder mergeGetDeviceConfig(com.impinj.stp.StpApi.GetDeviceConfigResp value) {
        if (getDeviceConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              getDeviceConfig_ != com.impinj.stp.StpApi.GetDeviceConfigResp.getDefaultInstance()) {
            getDeviceConfig_ =
              com.impinj.stp.StpApi.GetDeviceConfigResp.newBuilder(getDeviceConfig_).mergeFrom(value).buildPartial();
          } else {
            getDeviceConfig_ = value;
          }
          onChanged();
        } else {
          getDeviceConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       */
      public Builder clearGetDeviceConfig() {
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfig_ = com.impinj.stp.StpApi.GetDeviceConfigResp.getDefaultInstance();
          onChanged();
        } else {
          getDeviceConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceConfigResp.Builder getGetDeviceConfigBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getGetDeviceConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetDeviceConfigRespOrBuilder getGetDeviceConfigOrBuilder() {
        if (getDeviceConfigBuilder_ != null) {
          return getDeviceConfigBuilder_.getMessageOrBuilder();
        } else {
          return getDeviceConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetDeviceConfigResp, com.impinj.stp.StpApi.GetDeviceConfigResp.Builder, com.impinj.stp.StpApi.GetDeviceConfigRespOrBuilder> 
          getGetDeviceConfigFieldBuilder() {
        if (getDeviceConfigBuilder_ == null) {
          getDeviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetDeviceConfigResp, com.impinj.stp.StpApi.GetDeviceConfigResp.Builder, com.impinj.stp.StpApi.GetDeviceConfigRespOrBuilder>(
                  getDeviceConfig_,
                  getParentForChildren(),
                  isClean());
          getDeviceConfig_ = null;
        }
        return getDeviceConfigBuilder_;
      }

      // optional .Impinj.STP.SetAntennaConfigResp set_antenna_config = 12034;
      private com.impinj.stp.StpApi.SetAntennaConfigResp setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetAntennaConfigResp, com.impinj.stp.StpApi.SetAntennaConfigResp.Builder, com.impinj.stp.StpApi.SetAntennaConfigRespOrBuilder> setAntennaConfigBuilder_;
      /**
       */
      public boolean hasSetAntennaConfig() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetAntennaConfigResp getSetAntennaConfig() {
        if (setAntennaConfigBuilder_ == null) {
          return setAntennaConfig_;
        } else {
          return setAntennaConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetAntennaConfig(com.impinj.stp.StpApi.SetAntennaConfigResp value) {
        if (setAntennaConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setAntennaConfig_ = value;
          onChanged();
        } else {
          setAntennaConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder setSetAntennaConfig(
          com.impinj.stp.StpApi.SetAntennaConfigResp.Builder builderForValue) {
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfig_ = builderForValue.build();
          onChanged();
        } else {
          setAntennaConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder mergeSetAntennaConfig(com.impinj.stp.StpApi.SetAntennaConfigResp value) {
        if (setAntennaConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              setAntennaConfig_ != com.impinj.stp.StpApi.SetAntennaConfigResp.getDefaultInstance()) {
            setAntennaConfig_ =
              com.impinj.stp.StpApi.SetAntennaConfigResp.newBuilder(setAntennaConfig_).mergeFrom(value).buildPartial();
          } else {
            setAntennaConfig_ = value;
          }
          onChanged();
        } else {
          setAntennaConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       */
      public Builder clearSetAntennaConfig() {
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfig_ = com.impinj.stp.StpApi.SetAntennaConfigResp.getDefaultInstance();
          onChanged();
        } else {
          setAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetAntennaConfigResp.Builder getSetAntennaConfigBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getSetAntennaConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetAntennaConfigRespOrBuilder getSetAntennaConfigOrBuilder() {
        if (setAntennaConfigBuilder_ != null) {
          return setAntennaConfigBuilder_.getMessageOrBuilder();
        } else {
          return setAntennaConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetAntennaConfigResp, com.impinj.stp.StpApi.SetAntennaConfigResp.Builder, com.impinj.stp.StpApi.SetAntennaConfigRespOrBuilder> 
          getSetAntennaConfigFieldBuilder() {
        if (setAntennaConfigBuilder_ == null) {
          setAntennaConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetAntennaConfigResp, com.impinj.stp.StpApi.SetAntennaConfigResp.Builder, com.impinj.stp.StpApi.SetAntennaConfigRespOrBuilder>(
                  setAntennaConfig_,
                  getParentForChildren(),
                  isClean());
          setAntennaConfig_ = null;
        }
        return setAntennaConfigBuilder_;
      }

      // optional .Impinj.STP.GetAntennaConfigResp get_antenna_config = 12035;
      private com.impinj.stp.StpApi.GetAntennaConfigResp getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetAntennaConfigResp, com.impinj.stp.StpApi.GetAntennaConfigResp.Builder, com.impinj.stp.StpApi.GetAntennaConfigRespOrBuilder> getAntennaConfigBuilder_;
      /**
       */
      public boolean hasGetAntennaConfig() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetAntennaConfigResp getGetAntennaConfig() {
        if (getAntennaConfigBuilder_ == null) {
          return getAntennaConfig_;
        } else {
          return getAntennaConfigBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetAntennaConfig(com.impinj.stp.StpApi.GetAntennaConfigResp value) {
        if (getAntennaConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getAntennaConfig_ = value;
          onChanged();
        } else {
          getAntennaConfigBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder setGetAntennaConfig(
          com.impinj.stp.StpApi.GetAntennaConfigResp.Builder builderForValue) {
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfig_ = builderForValue.build();
          onChanged();
        } else {
          getAntennaConfigBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder mergeGetAntennaConfig(com.impinj.stp.StpApi.GetAntennaConfigResp value) {
        if (getAntennaConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              getAntennaConfig_ != com.impinj.stp.StpApi.GetAntennaConfigResp.getDefaultInstance()) {
            getAntennaConfig_ =
              com.impinj.stp.StpApi.GetAntennaConfigResp.newBuilder(getAntennaConfig_).mergeFrom(value).buildPartial();
          } else {
            getAntennaConfig_ = value;
          }
          onChanged();
        } else {
          getAntennaConfigBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       */
      public Builder clearGetAntennaConfig() {
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfig_ = com.impinj.stp.StpApi.GetAntennaConfigResp.getDefaultInstance();
          onChanged();
        } else {
          getAntennaConfigBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetAntennaConfigResp.Builder getGetAntennaConfigBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getGetAntennaConfigFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetAntennaConfigRespOrBuilder getGetAntennaConfigOrBuilder() {
        if (getAntennaConfigBuilder_ != null) {
          return getAntennaConfigBuilder_.getMessageOrBuilder();
        } else {
          return getAntennaConfig_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetAntennaConfigResp, com.impinj.stp.StpApi.GetAntennaConfigResp.Builder, com.impinj.stp.StpApi.GetAntennaConfigRespOrBuilder> 
          getGetAntennaConfigFieldBuilder() {
        if (getAntennaConfigBuilder_ == null) {
          getAntennaConfigBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetAntennaConfigResp, com.impinj.stp.StpApi.GetAntennaConfigResp.Builder, com.impinj.stp.StpApi.GetAntennaConfigRespOrBuilder>(
                  getAntennaConfig_,
                  getParentForChildren(),
                  isClean());
          getAntennaConfig_ = null;
        }
        return getAntennaConfigBuilder_;
      }

      // optional .Impinj.STP.EngageResp engage = 12036;
      private com.impinj.stp.StpApi.EngageResp engage_ = com.impinj.stp.StpApi.EngageResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EngageResp, com.impinj.stp.StpApi.EngageResp.Builder, com.impinj.stp.StpApi.EngageRespOrBuilder> engageBuilder_;
      /**
       */
      public boolean hasEngage() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       */
      public com.impinj.stp.StpApi.EngageResp getEngage() {
        if (engageBuilder_ == null) {
          return engage_;
        } else {
          return engageBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setEngage(com.impinj.stp.StpApi.EngageResp value) {
        if (engageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          engage_ = value;
          onChanged();
        } else {
          engageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder setEngage(
          com.impinj.stp.StpApi.EngageResp.Builder builderForValue) {
        if (engageBuilder_ == null) {
          engage_ = builderForValue.build();
          onChanged();
        } else {
          engageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder mergeEngage(com.impinj.stp.StpApi.EngageResp value) {
        if (engageBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              engage_ != com.impinj.stp.StpApi.EngageResp.getDefaultInstance()) {
            engage_ =
              com.impinj.stp.StpApi.EngageResp.newBuilder(engage_).mergeFrom(value).buildPartial();
          } else {
            engage_ = value;
          }
          onChanged();
        } else {
          engageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       */
      public Builder clearEngage() {
        if (engageBuilder_ == null) {
          engage_ = com.impinj.stp.StpApi.EngageResp.getDefaultInstance();
          onChanged();
        } else {
          engageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.EngageResp.Builder getEngageBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getEngageFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.EngageRespOrBuilder getEngageOrBuilder() {
        if (engageBuilder_ != null) {
          return engageBuilder_.getMessageOrBuilder();
        } else {
          return engage_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.EngageResp, com.impinj.stp.StpApi.EngageResp.Builder, com.impinj.stp.StpApi.EngageRespOrBuilder> 
          getEngageFieldBuilder() {
        if (engageBuilder_ == null) {
          engageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.EngageResp, com.impinj.stp.StpApi.EngageResp.Builder, com.impinj.stp.StpApi.EngageRespOrBuilder>(
                  engage_,
                  getParentForChildren(),
                  isClean());
          engage_ = null;
        }
        return engageBuilder_;
      }

      // optional .Impinj.STP.DisengageResp disengage = 12037;
      private com.impinj.stp.StpApi.DisengageResp disengage_ = com.impinj.stp.StpApi.DisengageResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DisengageResp, com.impinj.stp.StpApi.DisengageResp.Builder, com.impinj.stp.StpApi.DisengageRespOrBuilder> disengageBuilder_;
      /**
       */
      public boolean hasDisengage() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       */
      public com.impinj.stp.StpApi.DisengageResp getDisengage() {
        if (disengageBuilder_ == null) {
          return disengage_;
        } else {
          return disengageBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setDisengage(com.impinj.stp.StpApi.DisengageResp value) {
        if (disengageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          disengage_ = value;
          onChanged();
        } else {
          disengageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       */
      public Builder setDisengage(
          com.impinj.stp.StpApi.DisengageResp.Builder builderForValue) {
        if (disengageBuilder_ == null) {
          disengage_ = builderForValue.build();
          onChanged();
        } else {
          disengageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       */
      public Builder mergeDisengage(com.impinj.stp.StpApi.DisengageResp value) {
        if (disengageBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              disengage_ != com.impinj.stp.StpApi.DisengageResp.getDefaultInstance()) {
            disengage_ =
              com.impinj.stp.StpApi.DisengageResp.newBuilder(disengage_).mergeFrom(value).buildPartial();
          } else {
            disengage_ = value;
          }
          onChanged();
        } else {
          disengageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       */
      public Builder clearDisengage() {
        if (disengageBuilder_ == null) {
          disengage_ = com.impinj.stp.StpApi.DisengageResp.getDefaultInstance();
          onChanged();
        } else {
          disengageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.DisengageResp.Builder getDisengageBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getDisengageFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.DisengageRespOrBuilder getDisengageOrBuilder() {
        if (disengageBuilder_ != null) {
          return disengageBuilder_.getMessageOrBuilder();
        } else {
          return disengage_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DisengageResp, com.impinj.stp.StpApi.DisengageResp.Builder, com.impinj.stp.StpApi.DisengageRespOrBuilder> 
          getDisengageFieldBuilder() {
        if (disengageBuilder_ == null) {
          disengageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DisengageResp, com.impinj.stp.StpApi.DisengageResp.Builder, com.impinj.stp.StpApi.DisengageRespOrBuilder>(
                  disengage_,
                  getParentForChildren(),
                  isClean());
          disengage_ = null;
        }
        return disengageBuilder_;
      }

      // optional .Impinj.STP.SetOperationResultGPOResp set_operation_result_gpo = 12041;
      private com.impinj.stp.StpApi.SetOperationResultGPOResp setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetOperationResultGPOResp, com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder, com.impinj.stp.StpApi.SetOperationResultGPORespOrBuilder> setOperationResultGpoBuilder_;
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public boolean hasSetOperationResultGpo() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public com.impinj.stp.StpApi.SetOperationResultGPOResp getSetOperationResultGpo() {
        if (setOperationResultGpoBuilder_ == null) {
          return setOperationResultGpo_;
        } else {
          return setOperationResultGpoBuilder_.getMessage();
        }
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public Builder setSetOperationResultGpo(com.impinj.stp.StpApi.SetOperationResultGPOResp value) {
        if (setOperationResultGpoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setOperationResultGpo_ = value;
          onChanged();
        } else {
          setOperationResultGpoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public Builder setSetOperationResultGpo(
          com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder builderForValue) {
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpo_ = builderForValue.build();
          onChanged();
        } else {
          setOperationResultGpoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public Builder mergeSetOperationResultGpo(com.impinj.stp.StpApi.SetOperationResultGPOResp value) {
        if (setOperationResultGpoBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000) &&
              setOperationResultGpo_ != com.impinj.stp.StpApi.SetOperationResultGPOResp.getDefaultInstance()) {
            setOperationResultGpo_ =
              com.impinj.stp.StpApi.SetOperationResultGPOResp.newBuilder(setOperationResultGpo_).mergeFrom(value).buildPartial();
          } else {
            setOperationResultGpo_ = value;
          }
          onChanged();
        } else {
          setOperationResultGpoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public Builder clearSetOperationResultGpo() {
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpo_ = com.impinj.stp.StpApi.SetOperationResultGPOResp.getDefaultInstance();
          onChanged();
        } else {
          setOperationResultGpoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder getSetOperationResultGpoBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getSetOperationResultGpoFieldBuilder().getBuilder();
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      public com.impinj.stp.StpApi.SetOperationResultGPORespOrBuilder getSetOperationResultGpoOrBuilder() {
        if (setOperationResultGpoBuilder_ != null) {
          return setOperationResultGpoBuilder_.getMessageOrBuilder();
        } else {
          return setOperationResultGpo_;
        }
      }
      /**
       *
       * DEPRECATED 0x2f06;  DEPRECATED 0x2f07;  DEPRECATED 0x2f08;
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetOperationResultGPOResp, com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder, com.impinj.stp.StpApi.SetOperationResultGPORespOrBuilder> 
          getSetOperationResultGpoFieldBuilder() {
        if (setOperationResultGpoBuilder_ == null) {
          setOperationResultGpoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetOperationResultGPOResp, com.impinj.stp.StpApi.SetOperationResultGPOResp.Builder, com.impinj.stp.StpApi.SetOperationResultGPORespOrBuilder>(
                  setOperationResultGpo_,
                  getParentForChildren(),
                  isClean());
          setOperationResultGpo_ = null;
        }
        return setOperationResultGpoBuilder_;
      }

      // optional .Impinj.STP.AddSerializationJobResp add_serialization_job = 12042;
      private com.impinj.stp.StpApi.AddSerializationJobResp addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddSerializationJobResp, com.impinj.stp.StpApi.AddSerializationJobResp.Builder, com.impinj.stp.StpApi.AddSerializationJobRespOrBuilder> addSerializationJobBuilder_;
      /**
       */
      public boolean hasAddSerializationJob() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddSerializationJobResp getAddSerializationJob() {
        if (addSerializationJobBuilder_ == null) {
          return addSerializationJob_;
        } else {
          return addSerializationJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddSerializationJob(com.impinj.stp.StpApi.AddSerializationJobResp value) {
        if (addSerializationJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addSerializationJob_ = value;
          onChanged();
        } else {
          addSerializationJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       */
      public Builder setAddSerializationJob(
          com.impinj.stp.StpApi.AddSerializationJobResp.Builder builderForValue) {
        if (addSerializationJobBuilder_ == null) {
          addSerializationJob_ = builderForValue.build();
          onChanged();
        } else {
          addSerializationJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       */
      public Builder mergeAddSerializationJob(com.impinj.stp.StpApi.AddSerializationJobResp value) {
        if (addSerializationJobBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000) &&
              addSerializationJob_ != com.impinj.stp.StpApi.AddSerializationJobResp.getDefaultInstance()) {
            addSerializationJob_ =
              com.impinj.stp.StpApi.AddSerializationJobResp.newBuilder(addSerializationJob_).mergeFrom(value).buildPartial();
          } else {
            addSerializationJob_ = value;
          }
          onChanged();
        } else {
          addSerializationJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       */
      public Builder clearAddSerializationJob() {
        if (addSerializationJobBuilder_ == null) {
          addSerializationJob_ = com.impinj.stp.StpApi.AddSerializationJobResp.getDefaultInstance();
          onChanged();
        } else {
          addSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddSerializationJobResp.Builder getAddSerializationJobBuilder() {
        bitField0_ |= 0x00002000;
        onChanged();
        return getAddSerializationJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddSerializationJobRespOrBuilder getAddSerializationJobOrBuilder() {
        if (addSerializationJobBuilder_ != null) {
          return addSerializationJobBuilder_.getMessageOrBuilder();
        } else {
          return addSerializationJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddSerializationJobResp, com.impinj.stp.StpApi.AddSerializationJobResp.Builder, com.impinj.stp.StpApi.AddSerializationJobRespOrBuilder> 
          getAddSerializationJobFieldBuilder() {
        if (addSerializationJobBuilder_ == null) {
          addSerializationJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddSerializationJobResp, com.impinj.stp.StpApi.AddSerializationJobResp.Builder, com.impinj.stp.StpApi.AddSerializationJobRespOrBuilder>(
                  addSerializationJob_,
                  getParentForChildren(),
                  isClean());
          addSerializationJob_ = null;
        }
        return addSerializationJobBuilder_;
      }

      // optional .Impinj.STP.RemoveSerializationJobResp remove_serialization_job = 12043;
      private com.impinj.stp.StpApi.RemoveSerializationJobResp removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.RemoveSerializationJobResp, com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder, com.impinj.stp.StpApi.RemoveSerializationJobRespOrBuilder> removeSerializationJobBuilder_;
      /**
       */
      public boolean hasRemoveSerializationJob() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       */
      public com.impinj.stp.StpApi.RemoveSerializationJobResp getRemoveSerializationJob() {
        if (removeSerializationJobBuilder_ == null) {
          return removeSerializationJob_;
        } else {
          return removeSerializationJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setRemoveSerializationJob(com.impinj.stp.StpApi.RemoveSerializationJobResp value) {
        if (removeSerializationJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          removeSerializationJob_ = value;
          onChanged();
        } else {
          removeSerializationJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       */
      public Builder setRemoveSerializationJob(
          com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder builderForValue) {
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJob_ = builderForValue.build();
          onChanged();
        } else {
          removeSerializationJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       */
      public Builder mergeRemoveSerializationJob(com.impinj.stp.StpApi.RemoveSerializationJobResp value) {
        if (removeSerializationJobBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000) &&
              removeSerializationJob_ != com.impinj.stp.StpApi.RemoveSerializationJobResp.getDefaultInstance()) {
            removeSerializationJob_ =
              com.impinj.stp.StpApi.RemoveSerializationJobResp.newBuilder(removeSerializationJob_).mergeFrom(value).buildPartial();
          } else {
            removeSerializationJob_ = value;
          }
          onChanged();
        } else {
          removeSerializationJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00004000;
        return this;
      }
      /**
       */
      public Builder clearRemoveSerializationJob() {
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJob_ = com.impinj.stp.StpApi.RemoveSerializationJobResp.getDefaultInstance();
          onChanged();
        } else {
          removeSerializationJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00004000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder getRemoveSerializationJobBuilder() {
        bitField0_ |= 0x00004000;
        onChanged();
        return getRemoveSerializationJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.RemoveSerializationJobRespOrBuilder getRemoveSerializationJobOrBuilder() {
        if (removeSerializationJobBuilder_ != null) {
          return removeSerializationJobBuilder_.getMessageOrBuilder();
        } else {
          return removeSerializationJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.RemoveSerializationJobResp, com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder, com.impinj.stp.StpApi.RemoveSerializationJobRespOrBuilder> 
          getRemoveSerializationJobFieldBuilder() {
        if (removeSerializationJobBuilder_ == null) {
          removeSerializationJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.RemoveSerializationJobResp, com.impinj.stp.StpApi.RemoveSerializationJobResp.Builder, com.impinj.stp.StpApi.RemoveSerializationJobRespOrBuilder>(
                  removeSerializationJob_,
                  getParentForChildren(),
                  isClean());
          removeSerializationJob_ = null;
        }
        return removeSerializationJobBuilder_;
      }

      // optional .Impinj.STP.AddTIDTableEntriesResp add_tid_table_entries = 12044;
      private com.impinj.stp.StpApi.AddTIDTableEntriesResp addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddTIDTableEntriesResp, com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesRespOrBuilder> addTidTableEntriesBuilder_;
      /**
       */
      public boolean hasAddTidTableEntries() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesResp getAddTidTableEntries() {
        if (addTidTableEntriesBuilder_ == null) {
          return addTidTableEntries_;
        } else {
          return addTidTableEntriesBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddTidTableEntries(com.impinj.stp.StpApi.AddTIDTableEntriesResp value) {
        if (addTidTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addTidTableEntries_ = value;
          onChanged();
        } else {
          addTidTableEntriesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       */
      public Builder setAddTidTableEntries(
          com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder builderForValue) {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = builderForValue.build();
          onChanged();
        } else {
          addTidTableEntriesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       */
      public Builder mergeAddTidTableEntries(com.impinj.stp.StpApi.AddTIDTableEntriesResp value) {
        if (addTidTableEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000) &&
              addTidTableEntries_ != com.impinj.stp.StpApi.AddTIDTableEntriesResp.getDefaultInstance()) {
            addTidTableEntries_ =
              com.impinj.stp.StpApi.AddTIDTableEntriesResp.newBuilder(addTidTableEntries_).mergeFrom(value).buildPartial();
          } else {
            addTidTableEntries_ = value;
          }
          onChanged();
        } else {
          addTidTableEntriesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       */
      public Builder clearAddTidTableEntries() {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesResp.getDefaultInstance();
          onChanged();
        } else {
          addTidTableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder getAddTidTableEntriesBuilder() {
        bitField0_ |= 0x00008000;
        onChanged();
        return getAddTidTableEntriesFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesRespOrBuilder getAddTidTableEntriesOrBuilder() {
        if (addTidTableEntriesBuilder_ != null) {
          return addTidTableEntriesBuilder_.getMessageOrBuilder();
        } else {
          return addTidTableEntries_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddTIDTableEntriesResp, com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesRespOrBuilder> 
          getAddTidTableEntriesFieldBuilder() {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntriesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddTIDTableEntriesResp, com.impinj.stp.StpApi.AddTIDTableEntriesResp.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesRespOrBuilder>(
                  addTidTableEntries_,
                  getParentForChildren(),
                  isClean());
          addTidTableEntries_ = null;
        }
        return addTidTableEntriesBuilder_;
      }

      // optional .Impinj.STP.AddOrderedListEntriesResp add_ordered_list_entries = 12045;
      private com.impinj.stp.StpApi.AddOrderedListEntriesResp addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddOrderedListEntriesResp, com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder, com.impinj.stp.StpApi.AddOrderedListEntriesRespOrBuilder> addOrderedListEntriesBuilder_;
      /**
       */
      public boolean hasAddOrderedListEntries() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddOrderedListEntriesResp getAddOrderedListEntries() {
        if (addOrderedListEntriesBuilder_ == null) {
          return addOrderedListEntries_;
        } else {
          return addOrderedListEntriesBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddOrderedListEntries(com.impinj.stp.StpApi.AddOrderedListEntriesResp value) {
        if (addOrderedListEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addOrderedListEntries_ = value;
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       */
      public Builder setAddOrderedListEntries(
          com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder builderForValue) {
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntries_ = builderForValue.build();
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       */
      public Builder mergeAddOrderedListEntries(com.impinj.stp.StpApi.AddOrderedListEntriesResp value) {
        if (addOrderedListEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000) &&
              addOrderedListEntries_ != com.impinj.stp.StpApi.AddOrderedListEntriesResp.getDefaultInstance()) {
            addOrderedListEntries_ =
              com.impinj.stp.StpApi.AddOrderedListEntriesResp.newBuilder(addOrderedListEntries_).mergeFrom(value).buildPartial();
          } else {
            addOrderedListEntries_ = value;
          }
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00010000;
        return this;
      }
      /**
       */
      public Builder clearAddOrderedListEntries() {
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntries_ = com.impinj.stp.StpApi.AddOrderedListEntriesResp.getDefaultInstance();
          onChanged();
        } else {
          addOrderedListEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder getAddOrderedListEntriesBuilder() {
        bitField0_ |= 0x00010000;
        onChanged();
        return getAddOrderedListEntriesFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddOrderedListEntriesRespOrBuilder getAddOrderedListEntriesOrBuilder() {
        if (addOrderedListEntriesBuilder_ != null) {
          return addOrderedListEntriesBuilder_.getMessageOrBuilder();
        } else {
          return addOrderedListEntries_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddOrderedListEntriesResp, com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder, com.impinj.stp.StpApi.AddOrderedListEntriesRespOrBuilder> 
          getAddOrderedListEntriesFieldBuilder() {
        if (addOrderedListEntriesBuilder_ == null) {
          addOrderedListEntriesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddOrderedListEntriesResp, com.impinj.stp.StpApi.AddOrderedListEntriesResp.Builder, com.impinj.stp.StpApi.AddOrderedListEntriesRespOrBuilder>(
                  addOrderedListEntries_,
                  getParentForChildren(),
                  isClean());
          addOrderedListEntries_ = null;
        }
        return addOrderedListEntriesBuilder_;
      }

      // optional .Impinj.STP.SetInventoryJobResp set_inventory_job = 12046;
      private com.impinj.stp.StpApi.SetInventoryJobResp setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetInventoryJobResp, com.impinj.stp.StpApi.SetInventoryJobResp.Builder, com.impinj.stp.StpApi.SetInventoryJobRespOrBuilder> setInventoryJobBuilder_;
      /**
       */
      public boolean hasSetInventoryJob() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetInventoryJobResp getSetInventoryJob() {
        if (setInventoryJobBuilder_ == null) {
          return setInventoryJob_;
        } else {
          return setInventoryJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetInventoryJob(com.impinj.stp.StpApi.SetInventoryJobResp value) {
        if (setInventoryJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setInventoryJob_ = value;
          onChanged();
        } else {
          setInventoryJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder setSetInventoryJob(
          com.impinj.stp.StpApi.SetInventoryJobResp.Builder builderForValue) {
        if (setInventoryJobBuilder_ == null) {
          setInventoryJob_ = builderForValue.build();
          onChanged();
        } else {
          setInventoryJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder mergeSetInventoryJob(com.impinj.stp.StpApi.SetInventoryJobResp value) {
        if (setInventoryJobBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000) &&
              setInventoryJob_ != com.impinj.stp.StpApi.SetInventoryJobResp.getDefaultInstance()) {
            setInventoryJob_ =
              com.impinj.stp.StpApi.SetInventoryJobResp.newBuilder(setInventoryJob_).mergeFrom(value).buildPartial();
          } else {
            setInventoryJob_ = value;
          }
          onChanged();
        } else {
          setInventoryJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       */
      public Builder clearSetInventoryJob() {
        if (setInventoryJobBuilder_ == null) {
          setInventoryJob_ = com.impinj.stp.StpApi.SetInventoryJobResp.getDefaultInstance();
          onChanged();
        } else {
          setInventoryJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetInventoryJobResp.Builder getSetInventoryJobBuilder() {
        bitField0_ |= 0x00020000;
        onChanged();
        return getSetInventoryJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetInventoryJobRespOrBuilder getSetInventoryJobOrBuilder() {
        if (setInventoryJobBuilder_ != null) {
          return setInventoryJobBuilder_.getMessageOrBuilder();
        } else {
          return setInventoryJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetInventoryJobResp, com.impinj.stp.StpApi.SetInventoryJobResp.Builder, com.impinj.stp.StpApi.SetInventoryJobRespOrBuilder> 
          getSetInventoryJobFieldBuilder() {
        if (setInventoryJobBuilder_ == null) {
          setInventoryJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetInventoryJobResp, com.impinj.stp.StpApi.SetInventoryJobResp.Builder, com.impinj.stp.StpApi.SetInventoryJobRespOrBuilder>(
                  setInventoryJob_,
                  getParentForChildren(),
                  isClean());
          setInventoryJob_ = null;
        }
        return setInventoryJobBuilder_;
      }

      // optional .Impinj.STP.SetCartonContentsJobResp set_carton_contents_job = 12047;
      private com.impinj.stp.StpApi.SetCartonContentsJobResp setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetCartonContentsJobResp, com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder, com.impinj.stp.StpApi.SetCartonContentsJobRespOrBuilder> setCartonContentsJobBuilder_;
      /**
       */
      public boolean hasSetCartonContentsJob() {
        return ((bitField0_ & 0x00040000) == 0x00040000);
      }
      /**
       */
      public com.impinj.stp.StpApi.SetCartonContentsJobResp getSetCartonContentsJob() {
        if (setCartonContentsJobBuilder_ == null) {
          return setCartonContentsJob_;
        } else {
          return setCartonContentsJobBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setSetCartonContentsJob(com.impinj.stp.StpApi.SetCartonContentsJobResp value) {
        if (setCartonContentsJobBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          setCartonContentsJob_ = value;
          onChanged();
        } else {
          setCartonContentsJobBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       */
      public Builder setSetCartonContentsJob(
          com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder builderForValue) {
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJob_ = builderForValue.build();
          onChanged();
        } else {
          setCartonContentsJobBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       */
      public Builder mergeSetCartonContentsJob(com.impinj.stp.StpApi.SetCartonContentsJobResp value) {
        if (setCartonContentsJobBuilder_ == null) {
          if (((bitField0_ & 0x00040000) == 0x00040000) &&
              setCartonContentsJob_ != com.impinj.stp.StpApi.SetCartonContentsJobResp.getDefaultInstance()) {
            setCartonContentsJob_ =
              com.impinj.stp.StpApi.SetCartonContentsJobResp.newBuilder(setCartonContentsJob_).mergeFrom(value).buildPartial();
          } else {
            setCartonContentsJob_ = value;
          }
          onChanged();
        } else {
          setCartonContentsJobBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00040000;
        return this;
      }
      /**
       */
      public Builder clearSetCartonContentsJob() {
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJob_ = com.impinj.stp.StpApi.SetCartonContentsJobResp.getDefaultInstance();
          onChanged();
        } else {
          setCartonContentsJobBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00040000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder getSetCartonContentsJobBuilder() {
        bitField0_ |= 0x00040000;
        onChanged();
        return getSetCartonContentsJobFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.SetCartonContentsJobRespOrBuilder getSetCartonContentsJobOrBuilder() {
        if (setCartonContentsJobBuilder_ != null) {
          return setCartonContentsJobBuilder_.getMessageOrBuilder();
        } else {
          return setCartonContentsJob_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.SetCartonContentsJobResp, com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder, com.impinj.stp.StpApi.SetCartonContentsJobRespOrBuilder> 
          getSetCartonContentsJobFieldBuilder() {
        if (setCartonContentsJobBuilder_ == null) {
          setCartonContentsJobBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.SetCartonContentsJobResp, com.impinj.stp.StpApi.SetCartonContentsJobResp.Builder, com.impinj.stp.StpApi.SetCartonContentsJobRespOrBuilder>(
                  setCartonContentsJob_,
                  getParentForChildren(),
                  isClean());
          setCartonContentsJob_ = null;
        }
        return setCartonContentsJobBuilder_;
      }

      // optional .Impinj.STP.GetOperationDataResp get_operation_data = 12048;
      private com.impinj.stp.StpApi.GetOperationDataResp getOperationData_ = com.impinj.stp.StpApi.GetOperationDataResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetOperationDataResp, com.impinj.stp.StpApi.GetOperationDataResp.Builder, com.impinj.stp.StpApi.GetOperationDataRespOrBuilder> getOperationDataBuilder_;
      /**
       */
      public boolean hasGetOperationData() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       */
      public com.impinj.stp.StpApi.GetOperationDataResp getGetOperationData() {
        if (getOperationDataBuilder_ == null) {
          return getOperationData_;
        } else {
          return getOperationDataBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setGetOperationData(com.impinj.stp.StpApi.GetOperationDataResp value) {
        if (getOperationDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getOperationData_ = value;
          onChanged();
        } else {
          getOperationDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       */
      public Builder setGetOperationData(
          com.impinj.stp.StpApi.GetOperationDataResp.Builder builderForValue) {
        if (getOperationDataBuilder_ == null) {
          getOperationData_ = builderForValue.build();
          onChanged();
        } else {
          getOperationDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       */
      public Builder mergeGetOperationData(com.impinj.stp.StpApi.GetOperationDataResp value) {
        if (getOperationDataBuilder_ == null) {
          if (((bitField0_ & 0x00080000) == 0x00080000) &&
              getOperationData_ != com.impinj.stp.StpApi.GetOperationDataResp.getDefaultInstance()) {
            getOperationData_ =
              com.impinj.stp.StpApi.GetOperationDataResp.newBuilder(getOperationData_).mergeFrom(value).buildPartial();
          } else {
            getOperationData_ = value;
          }
          onChanged();
        } else {
          getOperationDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00080000;
        return this;
      }
      /**
       */
      public Builder clearGetOperationData() {
        if (getOperationDataBuilder_ == null) {
          getOperationData_ = com.impinj.stp.StpApi.GetOperationDataResp.getDefaultInstance();
          onChanged();
        } else {
          getOperationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00080000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.GetOperationDataResp.Builder getGetOperationDataBuilder() {
        bitField0_ |= 0x00080000;
        onChanged();
        return getGetOperationDataFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.GetOperationDataRespOrBuilder getGetOperationDataOrBuilder() {
        if (getOperationDataBuilder_ != null) {
          return getOperationDataBuilder_.getMessageOrBuilder();
        } else {
          return getOperationData_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.GetOperationDataResp, com.impinj.stp.StpApi.GetOperationDataResp.Builder, com.impinj.stp.StpApi.GetOperationDataRespOrBuilder> 
          getGetOperationDataFieldBuilder() {
        if (getOperationDataBuilder_ == null) {
          getOperationDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.GetOperationDataResp, com.impinj.stp.StpApi.GetOperationDataResp.Builder, com.impinj.stp.StpApi.GetOperationDataRespOrBuilder>(
                  getOperationData_,
                  getParentForChildren(),
                  isClean());
          getOperationData_ = null;
        }
        return getOperationDataBuilder_;
      }

      // optional .Impinj.STP.AddLicenseKeyResp add_license_key = 12049;
      private com.impinj.stp.StpApi.AddLicenseKeyResp addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyResp.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddLicenseKeyResp, com.impinj.stp.StpApi.AddLicenseKeyResp.Builder, com.impinj.stp.StpApi.AddLicenseKeyRespOrBuilder> addLicenseKeyBuilder_;
      /**
       */
      public boolean hasAddLicenseKey() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddLicenseKeyResp getAddLicenseKey() {
        if (addLicenseKeyBuilder_ == null) {
          return addLicenseKey_;
        } else {
          return addLicenseKeyBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddLicenseKey(com.impinj.stp.StpApi.AddLicenseKeyResp value) {
        if (addLicenseKeyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addLicenseKey_ = value;
          onChanged();
        } else {
          addLicenseKeyBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       */
      public Builder setAddLicenseKey(
          com.impinj.stp.StpApi.AddLicenseKeyResp.Builder builderForValue) {
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKey_ = builderForValue.build();
          onChanged();
        } else {
          addLicenseKeyBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       */
      public Builder mergeAddLicenseKey(com.impinj.stp.StpApi.AddLicenseKeyResp value) {
        if (addLicenseKeyBuilder_ == null) {
          if (((bitField0_ & 0x00100000) == 0x00100000) &&
              addLicenseKey_ != com.impinj.stp.StpApi.AddLicenseKeyResp.getDefaultInstance()) {
            addLicenseKey_ =
              com.impinj.stp.StpApi.AddLicenseKeyResp.newBuilder(addLicenseKey_).mergeFrom(value).buildPartial();
          } else {
            addLicenseKey_ = value;
          }
          onChanged();
        } else {
          addLicenseKeyBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00100000;
        return this;
      }
      /**
       */
      public Builder clearAddLicenseKey() {
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKey_ = com.impinj.stp.StpApi.AddLicenseKeyResp.getDefaultInstance();
          onChanged();
        } else {
          addLicenseKeyBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00100000);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddLicenseKeyResp.Builder getAddLicenseKeyBuilder() {
        bitField0_ |= 0x00100000;
        onChanged();
        return getAddLicenseKeyFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddLicenseKeyRespOrBuilder getAddLicenseKeyOrBuilder() {
        if (addLicenseKeyBuilder_ != null) {
          return addLicenseKeyBuilder_.getMessageOrBuilder();
        } else {
          return addLicenseKey_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddLicenseKeyResp, com.impinj.stp.StpApi.AddLicenseKeyResp.Builder, com.impinj.stp.StpApi.AddLicenseKeyRespOrBuilder> 
          getAddLicenseKeyFieldBuilder() {
        if (addLicenseKeyBuilder_ == null) {
          addLicenseKeyBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddLicenseKeyResp, com.impinj.stp.StpApi.AddLicenseKeyResp.Builder, com.impinj.stp.StpApi.AddLicenseKeyRespOrBuilder>(
                  addLicenseKey_,
                  getParentForChildren(),
                  isClean());
          addLicenseKey_ = null;
        }
        return addLicenseKeyBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Response)
    }

    static {
      defaultInstance = new Response(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Response)
  }

  public interface ReportOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.DeviceEventReport device_event_report = 1;
    /**
     */
    boolean hasDeviceEventReport();
    /**
     */
    com.impinj.stp.StpApi.DeviceEventReport getDeviceEventReport();
    /**
     */
    com.impinj.stp.StpApi.DeviceEventReportOrBuilder getDeviceEventReportOrBuilder();

    // optional .Impinj.STP.TagOperationReport tag_operation_report = 2;
    /**
     */
    boolean hasTagOperationReport();
    /**
     */
    com.impinj.stp.StpApi.TagOperationReport getTagOperationReport();
    /**
     */
    com.impinj.stp.StpApi.TagOperationReportOrBuilder getTagOperationReportOrBuilder();

    // optional .Impinj.STP.OperationSummaryReport operation_summary_report = 3;
    /**
     */
    boolean hasOperationSummaryReport();
    /**
     */
    com.impinj.stp.StpApi.OperationSummaryReport getOperationSummaryReport();
    /**
     */
    com.impinj.stp.StpApi.OperationSummaryReportOrBuilder getOperationSummaryReportOrBuilder();

    // optional .Impinj.STP.CartonContentsReport carton_contents_report = 4;
    /**
     */
    boolean hasCartonContentsReport();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsReport getCartonContentsReport();
    /**
     */
    com.impinj.stp.StpApi.CartonContentsReportOrBuilder getCartonContentsReportOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.Report}
   *
   * Async messages from Impinj Device to Host
   */
  public static final class Report extends
      com.google.protobuf.GeneratedMessage
      implements ReportOrBuilder {
    // Use Report.newBuilder() to construct.
    private Report(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Report(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Report defaultInstance;
    public static Report getDefaultInstance() {
      return defaultInstance;
    }

    public Report getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Report(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.DeviceEventReport.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = deviceEventReport_.toBuilder();
              }
              deviceEventReport_ = input.readMessage(com.impinj.stp.StpApi.DeviceEventReport.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceEventReport_);
                deviceEventReport_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.impinj.stp.StpApi.TagOperationReport.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = tagOperationReport_.toBuilder();
              }
              tagOperationReport_ = input.readMessage(com.impinj.stp.StpApi.TagOperationReport.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tagOperationReport_);
                tagOperationReport_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.OperationSummaryReport.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = operationSummaryReport_.toBuilder();
              }
              operationSummaryReport_ = input.readMessage(com.impinj.stp.StpApi.OperationSummaryReport.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(operationSummaryReport_);
                operationSummaryReport_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.impinj.stp.StpApi.CartonContentsReport.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = cartonContentsReport_.toBuilder();
              }
              cartonContentsReport_ = input.readMessage(com.impinj.stp.StpApi.CartonContentsReport.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(cartonContentsReport_);
                cartonContentsReport_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Report_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Report_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Report.class, com.impinj.stp.StpApi.Report.Builder.class);
    }

    public static com.google.protobuf.Parser<Report> PARSER =
        new com.google.protobuf.AbstractParser<Report>() {
      public Report parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Report(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Report> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.DeviceEventReport device_event_report = 1;
    public static final int DEVICE_EVENT_REPORT_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.DeviceEventReport deviceEventReport_;
    /**
     */
    public boolean hasDeviceEventReport() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceEventReport getDeviceEventReport() {
      return deviceEventReport_;
    }
    /**
     */
    public com.impinj.stp.StpApi.DeviceEventReportOrBuilder getDeviceEventReportOrBuilder() {
      return deviceEventReport_;
    }

    // optional .Impinj.STP.TagOperationReport tag_operation_report = 2;
    public static final int TAG_OPERATION_REPORT_FIELD_NUMBER = 2;
    private com.impinj.stp.StpApi.TagOperationReport tagOperationReport_;
    /**
     */
    public boolean hasTagOperationReport() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     */
    public com.impinj.stp.StpApi.TagOperationReport getTagOperationReport() {
      return tagOperationReport_;
    }
    /**
     */
    public com.impinj.stp.StpApi.TagOperationReportOrBuilder getTagOperationReportOrBuilder() {
      return tagOperationReport_;
    }

    // optional .Impinj.STP.OperationSummaryReport operation_summary_report = 3;
    public static final int OPERATION_SUMMARY_REPORT_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.OperationSummaryReport operationSummaryReport_;
    /**
     */
    public boolean hasOperationSummaryReport() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationSummaryReport getOperationSummaryReport() {
      return operationSummaryReport_;
    }
    /**
     */
    public com.impinj.stp.StpApi.OperationSummaryReportOrBuilder getOperationSummaryReportOrBuilder() {
      return operationSummaryReport_;
    }

    // optional .Impinj.STP.CartonContentsReport carton_contents_report = 4;
    public static final int CARTON_CONTENTS_REPORT_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.CartonContentsReport cartonContentsReport_;
    /**
     */
    public boolean hasCartonContentsReport() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsReport getCartonContentsReport() {
      return cartonContentsReport_;
    }
    /**
     */
    public com.impinj.stp.StpApi.CartonContentsReportOrBuilder getCartonContentsReportOrBuilder() {
      return cartonContentsReport_;
    }

    private void initFields() {
      deviceEventReport_ = com.impinj.stp.StpApi.DeviceEventReport.getDefaultInstance();
      tagOperationReport_ = com.impinj.stp.StpApi.TagOperationReport.getDefaultInstance();
      operationSummaryReport_ = com.impinj.stp.StpApi.OperationSummaryReport.getDefaultInstance();
      cartonContentsReport_ = com.impinj.stp.StpApi.CartonContentsReport.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasDeviceEventReport()) {
        if (!getDeviceEventReport().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasTagOperationReport()) {
        if (!getTagOperationReport().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasOperationSummaryReport()) {
        if (!getOperationSummaryReport().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, deviceEventReport_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, tagOperationReport_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, operationSummaryReport_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, cartonContentsReport_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, deviceEventReport_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, tagOperationReport_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, operationSummaryReport_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, cartonContentsReport_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Report parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Report parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Report parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Report parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Report parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Report parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Report parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Report parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Report parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Report parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Report prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Report}
     *
     * Async messages from Impinj Device to Host
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.ReportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Report_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Report_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Report.class, com.impinj.stp.StpApi.Report.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Report.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDeviceEventReportFieldBuilder();
          getTagOperationReportFieldBuilder();
          getOperationSummaryReportFieldBuilder();
          getCartonContentsReportFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (deviceEventReportBuilder_ == null) {
          deviceEventReport_ = com.impinj.stp.StpApi.DeviceEventReport.getDefaultInstance();
        } else {
          deviceEventReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (tagOperationReportBuilder_ == null) {
          tagOperationReport_ = com.impinj.stp.StpApi.TagOperationReport.getDefaultInstance();
        } else {
          tagOperationReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (operationSummaryReportBuilder_ == null) {
          operationSummaryReport_ = com.impinj.stp.StpApi.OperationSummaryReport.getDefaultInstance();
        } else {
          operationSummaryReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (cartonContentsReportBuilder_ == null) {
          cartonContentsReport_ = com.impinj.stp.StpApi.CartonContentsReport.getDefaultInstance();
        } else {
          cartonContentsReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Report_descriptor;
      }

      public com.impinj.stp.StpApi.Report getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Report.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Report build() {
        com.impinj.stp.StpApi.Report result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Report buildPartial() {
        com.impinj.stp.StpApi.Report result = new com.impinj.stp.StpApi.Report(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (deviceEventReportBuilder_ == null) {
          result.deviceEventReport_ = deviceEventReport_;
        } else {
          result.deviceEventReport_ = deviceEventReportBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (tagOperationReportBuilder_ == null) {
          result.tagOperationReport_ = tagOperationReport_;
        } else {
          result.tagOperationReport_ = tagOperationReportBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (operationSummaryReportBuilder_ == null) {
          result.operationSummaryReport_ = operationSummaryReport_;
        } else {
          result.operationSummaryReport_ = operationSummaryReportBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (cartonContentsReportBuilder_ == null) {
          result.cartonContentsReport_ = cartonContentsReport_;
        } else {
          result.cartonContentsReport_ = cartonContentsReportBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Report) {
          return mergeFrom((com.impinj.stp.StpApi.Report)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Report other) {
        if (other == com.impinj.stp.StpApi.Report.getDefaultInstance()) return this;
        if (other.hasDeviceEventReport()) {
          mergeDeviceEventReport(other.getDeviceEventReport());
        }
        if (other.hasTagOperationReport()) {
          mergeTagOperationReport(other.getTagOperationReport());
        }
        if (other.hasOperationSummaryReport()) {
          mergeOperationSummaryReport(other.getOperationSummaryReport());
        }
        if (other.hasCartonContentsReport()) {
          mergeCartonContentsReport(other.getCartonContentsReport());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasDeviceEventReport()) {
          if (!getDeviceEventReport().isInitialized()) {
            
            return false;
          }
        }
        if (hasTagOperationReport()) {
          if (!getTagOperationReport().isInitialized()) {
            
            return false;
          }
        }
        if (hasOperationSummaryReport()) {
          if (!getOperationSummaryReport().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Report parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Report) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.DeviceEventReport device_event_report = 1;
      private com.impinj.stp.StpApi.DeviceEventReport deviceEventReport_ = com.impinj.stp.StpApi.DeviceEventReport.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceEventReport, com.impinj.stp.StpApi.DeviceEventReport.Builder, com.impinj.stp.StpApi.DeviceEventReportOrBuilder> deviceEventReportBuilder_;
      /**
       */
      public boolean hasDeviceEventReport() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceEventReport getDeviceEventReport() {
        if (deviceEventReportBuilder_ == null) {
          return deviceEventReport_;
        } else {
          return deviceEventReportBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setDeviceEventReport(com.impinj.stp.StpApi.DeviceEventReport value) {
        if (deviceEventReportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceEventReport_ = value;
          onChanged();
        } else {
          deviceEventReportBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setDeviceEventReport(
          com.impinj.stp.StpApi.DeviceEventReport.Builder builderForValue) {
        if (deviceEventReportBuilder_ == null) {
          deviceEventReport_ = builderForValue.build();
          onChanged();
        } else {
          deviceEventReportBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeDeviceEventReport(com.impinj.stp.StpApi.DeviceEventReport value) {
        if (deviceEventReportBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              deviceEventReport_ != com.impinj.stp.StpApi.DeviceEventReport.getDefaultInstance()) {
            deviceEventReport_ =
              com.impinj.stp.StpApi.DeviceEventReport.newBuilder(deviceEventReport_).mergeFrom(value).buildPartial();
          } else {
            deviceEventReport_ = value;
          }
          onChanged();
        } else {
          deviceEventReportBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearDeviceEventReport() {
        if (deviceEventReportBuilder_ == null) {
          deviceEventReport_ = com.impinj.stp.StpApi.DeviceEventReport.getDefaultInstance();
          onChanged();
        } else {
          deviceEventReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceEventReport.Builder getDeviceEventReportBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDeviceEventReportFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.DeviceEventReportOrBuilder getDeviceEventReportOrBuilder() {
        if (deviceEventReportBuilder_ != null) {
          return deviceEventReportBuilder_.getMessageOrBuilder();
        } else {
          return deviceEventReport_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.DeviceEventReport, com.impinj.stp.StpApi.DeviceEventReport.Builder, com.impinj.stp.StpApi.DeviceEventReportOrBuilder> 
          getDeviceEventReportFieldBuilder() {
        if (deviceEventReportBuilder_ == null) {
          deviceEventReportBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.DeviceEventReport, com.impinj.stp.StpApi.DeviceEventReport.Builder, com.impinj.stp.StpApi.DeviceEventReportOrBuilder>(
                  deviceEventReport_,
                  getParentForChildren(),
                  isClean());
          deviceEventReport_ = null;
        }
        return deviceEventReportBuilder_;
      }

      // optional .Impinj.STP.TagOperationReport tag_operation_report = 2;
      private com.impinj.stp.StpApi.TagOperationReport tagOperationReport_ = com.impinj.stp.StpApi.TagOperationReport.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagOperationReport, com.impinj.stp.StpApi.TagOperationReport.Builder, com.impinj.stp.StpApi.TagOperationReportOrBuilder> tagOperationReportBuilder_;
      /**
       */
      public boolean hasTagOperationReport() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReport getTagOperationReport() {
        if (tagOperationReportBuilder_ == null) {
          return tagOperationReport_;
        } else {
          return tagOperationReportBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setTagOperationReport(com.impinj.stp.StpApi.TagOperationReport value) {
        if (tagOperationReportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tagOperationReport_ = value;
          onChanged();
        } else {
          tagOperationReportBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder setTagOperationReport(
          com.impinj.stp.StpApi.TagOperationReport.Builder builderForValue) {
        if (tagOperationReportBuilder_ == null) {
          tagOperationReport_ = builderForValue.build();
          onChanged();
        } else {
          tagOperationReportBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder mergeTagOperationReport(com.impinj.stp.StpApi.TagOperationReport value) {
        if (tagOperationReportBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              tagOperationReport_ != com.impinj.stp.StpApi.TagOperationReport.getDefaultInstance()) {
            tagOperationReport_ =
              com.impinj.stp.StpApi.TagOperationReport.newBuilder(tagOperationReport_).mergeFrom(value).buildPartial();
          } else {
            tagOperationReport_ = value;
          }
          onChanged();
        } else {
          tagOperationReportBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       */
      public Builder clearTagOperationReport() {
        if (tagOperationReportBuilder_ == null) {
          tagOperationReport_ = com.impinj.stp.StpApi.TagOperationReport.getDefaultInstance();
          onChanged();
        } else {
          tagOperationReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReport.Builder getTagOperationReportBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getTagOperationReportFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.TagOperationReportOrBuilder getTagOperationReportOrBuilder() {
        if (tagOperationReportBuilder_ != null) {
          return tagOperationReportBuilder_.getMessageOrBuilder();
        } else {
          return tagOperationReport_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.TagOperationReport, com.impinj.stp.StpApi.TagOperationReport.Builder, com.impinj.stp.StpApi.TagOperationReportOrBuilder> 
          getTagOperationReportFieldBuilder() {
        if (tagOperationReportBuilder_ == null) {
          tagOperationReportBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.TagOperationReport, com.impinj.stp.StpApi.TagOperationReport.Builder, com.impinj.stp.StpApi.TagOperationReportOrBuilder>(
                  tagOperationReport_,
                  getParentForChildren(),
                  isClean());
          tagOperationReport_ = null;
        }
        return tagOperationReportBuilder_;
      }

      // optional .Impinj.STP.OperationSummaryReport operation_summary_report = 3;
      private com.impinj.stp.StpApi.OperationSummaryReport operationSummaryReport_ = com.impinj.stp.StpApi.OperationSummaryReport.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationSummaryReport, com.impinj.stp.StpApi.OperationSummaryReport.Builder, com.impinj.stp.StpApi.OperationSummaryReportOrBuilder> operationSummaryReportBuilder_;
      /**
       */
      public boolean hasOperationSummaryReport() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryReport getOperationSummaryReport() {
        if (operationSummaryReportBuilder_ == null) {
          return operationSummaryReport_;
        } else {
          return operationSummaryReportBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setOperationSummaryReport(com.impinj.stp.StpApi.OperationSummaryReport value) {
        if (operationSummaryReportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          operationSummaryReport_ = value;
          onChanged();
        } else {
          operationSummaryReportBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder setOperationSummaryReport(
          com.impinj.stp.StpApi.OperationSummaryReport.Builder builderForValue) {
        if (operationSummaryReportBuilder_ == null) {
          operationSummaryReport_ = builderForValue.build();
          onChanged();
        } else {
          operationSummaryReportBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder mergeOperationSummaryReport(com.impinj.stp.StpApi.OperationSummaryReport value) {
        if (operationSummaryReportBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              operationSummaryReport_ != com.impinj.stp.StpApi.OperationSummaryReport.getDefaultInstance()) {
            operationSummaryReport_ =
              com.impinj.stp.StpApi.OperationSummaryReport.newBuilder(operationSummaryReport_).mergeFrom(value).buildPartial();
          } else {
            operationSummaryReport_ = value;
          }
          onChanged();
        } else {
          operationSummaryReportBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       */
      public Builder clearOperationSummaryReport() {
        if (operationSummaryReportBuilder_ == null) {
          operationSummaryReport_ = com.impinj.stp.StpApi.OperationSummaryReport.getDefaultInstance();
          onChanged();
        } else {
          operationSummaryReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryReport.Builder getOperationSummaryReportBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getOperationSummaryReportFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.OperationSummaryReportOrBuilder getOperationSummaryReportOrBuilder() {
        if (operationSummaryReportBuilder_ != null) {
          return operationSummaryReportBuilder_.getMessageOrBuilder();
        } else {
          return operationSummaryReport_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.OperationSummaryReport, com.impinj.stp.StpApi.OperationSummaryReport.Builder, com.impinj.stp.StpApi.OperationSummaryReportOrBuilder> 
          getOperationSummaryReportFieldBuilder() {
        if (operationSummaryReportBuilder_ == null) {
          operationSummaryReportBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.OperationSummaryReport, com.impinj.stp.StpApi.OperationSummaryReport.Builder, com.impinj.stp.StpApi.OperationSummaryReportOrBuilder>(
                  operationSummaryReport_,
                  getParentForChildren(),
                  isClean());
          operationSummaryReport_ = null;
        }
        return operationSummaryReportBuilder_;
      }

      // optional .Impinj.STP.CartonContentsReport carton_contents_report = 4;
      private com.impinj.stp.StpApi.CartonContentsReport cartonContentsReport_ = com.impinj.stp.StpApi.CartonContentsReport.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsReport, com.impinj.stp.StpApi.CartonContentsReport.Builder, com.impinj.stp.StpApi.CartonContentsReportOrBuilder> cartonContentsReportBuilder_;
      /**
       */
      public boolean hasCartonContentsReport() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsReport getCartonContentsReport() {
        if (cartonContentsReportBuilder_ == null) {
          return cartonContentsReport_;
        } else {
          return cartonContentsReportBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setCartonContentsReport(com.impinj.stp.StpApi.CartonContentsReport value) {
        if (cartonContentsReportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          cartonContentsReport_ = value;
          onChanged();
        } else {
          cartonContentsReportBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder setCartonContentsReport(
          com.impinj.stp.StpApi.CartonContentsReport.Builder builderForValue) {
        if (cartonContentsReportBuilder_ == null) {
          cartonContentsReport_ = builderForValue.build();
          onChanged();
        } else {
          cartonContentsReportBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder mergeCartonContentsReport(com.impinj.stp.StpApi.CartonContentsReport value) {
        if (cartonContentsReportBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              cartonContentsReport_ != com.impinj.stp.StpApi.CartonContentsReport.getDefaultInstance()) {
            cartonContentsReport_ =
              com.impinj.stp.StpApi.CartonContentsReport.newBuilder(cartonContentsReport_).mergeFrom(value).buildPartial();
          } else {
            cartonContentsReport_ = value;
          }
          onChanged();
        } else {
          cartonContentsReportBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       */
      public Builder clearCartonContentsReport() {
        if (cartonContentsReportBuilder_ == null) {
          cartonContentsReport_ = com.impinj.stp.StpApi.CartonContentsReport.getDefaultInstance();
          onChanged();
        } else {
          cartonContentsReportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsReport.Builder getCartonContentsReportBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getCartonContentsReportFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.CartonContentsReportOrBuilder getCartonContentsReportOrBuilder() {
        if (cartonContentsReportBuilder_ != null) {
          return cartonContentsReportBuilder_.getMessageOrBuilder();
        } else {
          return cartonContentsReport_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.CartonContentsReport, com.impinj.stp.StpApi.CartonContentsReport.Builder, com.impinj.stp.StpApi.CartonContentsReportOrBuilder> 
          getCartonContentsReportFieldBuilder() {
        if (cartonContentsReportBuilder_ == null) {
          cartonContentsReportBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.CartonContentsReport, com.impinj.stp.StpApi.CartonContentsReport.Builder, com.impinj.stp.StpApi.CartonContentsReportOrBuilder>(
                  cartonContentsReport_,
                  getParentForChildren(),
                  isClean());
          cartonContentsReport_ = null;
        }
        return cartonContentsReportBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Report)
    }

    static {
      defaultInstance = new Report(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Report)
  }

  public interface UpdateOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.AddTIDTableEntriesCommand add_tid_table_entries = 1;
    /**
     */
    boolean hasAddTidTableEntries();
    /**
     */
    com.impinj.stp.StpApi.AddTIDTableEntriesCommand getAddTidTableEntries();
    /**
     */
    com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder getAddTidTableEntriesOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.Update}
   *
   * Async messages from host to device.
   */
  public static final class Update extends
      com.google.protobuf.GeneratedMessage
      implements UpdateOrBuilder {
    // Use Update.newBuilder() to construct.
    private Update(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Update(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Update defaultInstance;
    public static Update getDefaultInstance() {
      return defaultInstance;
    }

    public Update getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Update(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = addTidTableEntries_.toBuilder();
              }
              addTidTableEntries_ = input.readMessage(com.impinj.stp.StpApi.AddTIDTableEntriesCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(addTidTableEntries_);
                addTidTableEntries_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Update_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Update_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Update.class, com.impinj.stp.StpApi.Update.Builder.class);
    }

    public static com.google.protobuf.Parser<Update> PARSER =
        new com.google.protobuf.AbstractParser<Update>() {
      public Update parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Update(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Update> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.AddTIDTableEntriesCommand add_tid_table_entries = 1;
    public static final int ADD_TID_TABLE_ENTRIES_FIELD_NUMBER = 1;
    private com.impinj.stp.StpApi.AddTIDTableEntriesCommand addTidTableEntries_;
    /**
     */
    public boolean hasAddTidTableEntries() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     */
    public com.impinj.stp.StpApi.AddTIDTableEntriesCommand getAddTidTableEntries() {
      return addTidTableEntries_;
    }
    /**
     */
    public com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder getAddTidTableEntriesOrBuilder() {
      return addTidTableEntries_;
    }

    private void initFields() {
      addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasAddTidTableEntries()) {
        if (!getAddTidTableEntries().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, addTidTableEntries_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, addTidTableEntries_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Update parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Update parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Update parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Update parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Update parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Update parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Update parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Update parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Update parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Update parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Update prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Update}
     *
     * Async messages from host to device.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.UpdateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Update_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Update_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Update.class, com.impinj.stp.StpApi.Update.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Update.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAddTidTableEntriesFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
        } else {
          addTidTableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Update_descriptor;
      }

      public com.impinj.stp.StpApi.Update getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Update.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Update build() {
        com.impinj.stp.StpApi.Update result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Update buildPartial() {
        com.impinj.stp.StpApi.Update result = new com.impinj.stp.StpApi.Update(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (addTidTableEntriesBuilder_ == null) {
          result.addTidTableEntries_ = addTidTableEntries_;
        } else {
          result.addTidTableEntries_ = addTidTableEntriesBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Update) {
          return mergeFrom((com.impinj.stp.StpApi.Update)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Update other) {
        if (other == com.impinj.stp.StpApi.Update.getDefaultInstance()) return this;
        if (other.hasAddTidTableEntries()) {
          mergeAddTidTableEntries(other.getAddTidTableEntries());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasAddTidTableEntries()) {
          if (!getAddTidTableEntries().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Update parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Update) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.AddTIDTableEntriesCommand add_tid_table_entries = 1;
      private com.impinj.stp.StpApi.AddTIDTableEntriesCommand addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddTIDTableEntriesCommand, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder> addTidTableEntriesBuilder_;
      /**
       */
      public boolean hasAddTidTableEntries() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesCommand getAddTidTableEntries() {
        if (addTidTableEntriesBuilder_ == null) {
          return addTidTableEntries_;
        } else {
          return addTidTableEntriesBuilder_.getMessage();
        }
      }
      /**
       */
      public Builder setAddTidTableEntries(com.impinj.stp.StpApi.AddTIDTableEntriesCommand value) {
        if (addTidTableEntriesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addTidTableEntries_ = value;
          onChanged();
        } else {
          addTidTableEntriesBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder setAddTidTableEntries(
          com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder builderForValue) {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = builderForValue.build();
          onChanged();
        } else {
          addTidTableEntriesBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder mergeAddTidTableEntries(com.impinj.stp.StpApi.AddTIDTableEntriesCommand value) {
        if (addTidTableEntriesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              addTidTableEntries_ != com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance()) {
            addTidTableEntries_ =
              com.impinj.stp.StpApi.AddTIDTableEntriesCommand.newBuilder(addTidTableEntries_).mergeFrom(value).buildPartial();
          } else {
            addTidTableEntries_ = value;
          }
          onChanged();
        } else {
          addTidTableEntriesBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       */
      public Builder clearAddTidTableEntries() {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntries_ = com.impinj.stp.StpApi.AddTIDTableEntriesCommand.getDefaultInstance();
          onChanged();
        } else {
          addTidTableEntriesBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder getAddTidTableEntriesBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getAddTidTableEntriesFieldBuilder().getBuilder();
      }
      /**
       */
      public com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder getAddTidTableEntriesOrBuilder() {
        if (addTidTableEntriesBuilder_ != null) {
          return addTidTableEntriesBuilder_.getMessageOrBuilder();
        } else {
          return addTidTableEntries_;
        }
      }
      /**
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.AddTIDTableEntriesCommand, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder> 
          getAddTidTableEntriesFieldBuilder() {
        if (addTidTableEntriesBuilder_ == null) {
          addTidTableEntriesBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.AddTIDTableEntriesCommand, com.impinj.stp.StpApi.AddTIDTableEntriesCommand.Builder, com.impinj.stp.StpApi.AddTIDTableEntriesCommandOrBuilder>(
                  addTidTableEntries_,
                  getParentForChildren(),
                  isClean());
          addTidTableEntries_ = null;
        }
        return addTidTableEntriesBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Update)
    }

    static {
      defaultInstance = new Update(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Update)
  }

  public interface PacketOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Impinj.STP.Command command = 3;
    /**
     *
     * to reader
     */
    boolean hasCommand();
    /**
     *
     * to reader
     */
    com.impinj.stp.StpApi.Command getCommand();
    /**
     *
     * to reader
     */
    com.impinj.stp.StpApi.CommandOrBuilder getCommandOrBuilder();

    // optional .Impinj.STP.Response response = 4;
    /**
     *
     * to host
     */
    boolean hasResponse();
    /**
     *
     * to host
     */
    com.impinj.stp.StpApi.Response getResponse();
    /**
     *
     * to host
     */
    com.impinj.stp.StpApi.ResponseOrBuilder getResponseOrBuilder();

    // optional .Impinj.STP.Report report = 5;
    /**
     *
     * Async message to host.
     */
    boolean hasReport();
    /**
     *
     * Async message to host.
     */
    com.impinj.stp.StpApi.Report getReport();
    /**
     *
     * Async message to host.
     */
    com.impinj.stp.StpApi.ReportOrBuilder getReportOrBuilder();

    // optional .Impinj.STP.Update update = 6;
    /**
     *
     * Async message to reader.
     */
    boolean hasUpdate();
    /**
     *
     * Async message to reader.
     */
    com.impinj.stp.StpApi.Update getUpdate();
    /**
     *
     * Async message to reader.
     */
    com.impinj.stp.StpApi.UpdateOrBuilder getUpdateOrBuilder();
  }
  /**
   * Protobuf type {@code Impinj.STP.Packet}
   *
   * The top-level Packet will contain a command, its response,
   * or an async report messages.
   */
  public static final class Packet extends
      com.google.protobuf.GeneratedMessage
      implements PacketOrBuilder {
    // Use Packet.newBuilder() to construct.
    private Packet(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Packet(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Packet defaultInstance;
    public static Packet getDefaultInstance() {
      return defaultInstance;
    }

    public Packet getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Packet(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 26: {
              com.impinj.stp.StpApi.Command.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = command_.toBuilder();
              }
              command_ = input.readMessage(com.impinj.stp.StpApi.Command.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(command_);
                command_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 34: {
              com.impinj.stp.StpApi.Response.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = response_.toBuilder();
              }
              response_ = input.readMessage(com.impinj.stp.StpApi.Response.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(response_);
                response_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 42: {
              com.impinj.stp.StpApi.Report.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = report_.toBuilder();
              }
              report_ = input.readMessage(com.impinj.stp.StpApi.Report.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(report_);
                report_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 50: {
              com.impinj.stp.StpApi.Update.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = update_.toBuilder();
              }
              update_ = input.readMessage(com.impinj.stp.StpApi.Update.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(update_);
                update_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Packet_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.impinj.stp.StpApi.internal_static_Impinj_STP_Packet_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.impinj.stp.StpApi.Packet.class, com.impinj.stp.StpApi.Packet.Builder.class);
    }

    public static com.google.protobuf.Parser<Packet> PARSER =
        new com.google.protobuf.AbstractParser<Packet>() {
      public Packet parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Packet(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Packet> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Impinj.STP.Command command = 3;
    public static final int COMMAND_FIELD_NUMBER = 3;
    private com.impinj.stp.StpApi.Command command_;
    /**
     *
     * to reader
     */
    public boolean hasCommand() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     *
     * to reader
     */
    public com.impinj.stp.StpApi.Command getCommand() {
      return command_;
    }
    /**
     *
     * to reader
     */
    public com.impinj.stp.StpApi.CommandOrBuilder getCommandOrBuilder() {
      return command_;
    }

    // optional .Impinj.STP.Response response = 4;
    public static final int RESPONSE_FIELD_NUMBER = 4;
    private com.impinj.stp.StpApi.Response response_;
    /**
     *
     * to host
     */
    public boolean hasResponse() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     *
     * to host
     */
    public com.impinj.stp.StpApi.Response getResponse() {
      return response_;
    }
    /**
     *
     * to host
     */
    public com.impinj.stp.StpApi.ResponseOrBuilder getResponseOrBuilder() {
      return response_;
    }

    // optional .Impinj.STP.Report report = 5;
    public static final int REPORT_FIELD_NUMBER = 5;
    private com.impinj.stp.StpApi.Report report_;
    /**
     *
     * Async message to host.
     */
    public boolean hasReport() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     *
     * Async message to host.
     */
    public com.impinj.stp.StpApi.Report getReport() {
      return report_;
    }
    /**
     *
     * Async message to host.
     */
    public com.impinj.stp.StpApi.ReportOrBuilder getReportOrBuilder() {
      return report_;
    }

    // optional .Impinj.STP.Update update = 6;
    public static final int UPDATE_FIELD_NUMBER = 6;
    private com.impinj.stp.StpApi.Update update_;
    /**
     *
     * Async message to reader.
     */
    public boolean hasUpdate() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     *
     * Async message to reader.
     */
    public com.impinj.stp.StpApi.Update getUpdate() {
      return update_;
    }
    /**
     *
     * Async message to reader.
     */
    public com.impinj.stp.StpApi.UpdateOrBuilder getUpdateOrBuilder() {
      return update_;
    }

    private void initFields() {
      command_ = com.impinj.stp.StpApi.Command.getDefaultInstance();
      response_ = com.impinj.stp.StpApi.Response.getDefaultInstance();
      report_ = com.impinj.stp.StpApi.Report.getDefaultInstance();
      update_ = com.impinj.stp.StpApi.Update.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      if (hasCommand()) {
        if (!getCommand().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasResponse()) {
        if (!getResponse().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasReport()) {
        if (!getReport().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasUpdate()) {
        if (!getUpdate().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(3, command_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(4, response_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(5, report_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(6, update_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, command_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, response_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, report_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, update_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.impinj.stp.StpApi.Packet parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Packet parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Packet parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.impinj.stp.StpApi.Packet parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Packet parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Packet parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Packet parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.impinj.stp.StpApi.Packet parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.impinj.stp.StpApi.Packet parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.impinj.stp.StpApi.Packet parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.impinj.stp.StpApi.Packet prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Impinj.STP.Packet}
     *
     * The top-level Packet will contain a command, its response,
     * or an async report messages.
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.impinj.stp.StpApi.PacketOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Packet_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Packet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.impinj.stp.StpApi.Packet.class, com.impinj.stp.StpApi.Packet.Builder.class);
      }

      // Construct using com.impinj.stp.StpApi.Packet.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCommandFieldBuilder();
          getResponseFieldBuilder();
          getReportFieldBuilder();
          getUpdateFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (commandBuilder_ == null) {
          command_ = com.impinj.stp.StpApi.Command.getDefaultInstance();
        } else {
          commandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (responseBuilder_ == null) {
          response_ = com.impinj.stp.StpApi.Response.getDefaultInstance();
        } else {
          responseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (reportBuilder_ == null) {
          report_ = com.impinj.stp.StpApi.Report.getDefaultInstance();
        } else {
          reportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (updateBuilder_ == null) {
          update_ = com.impinj.stp.StpApi.Update.getDefaultInstance();
        } else {
          updateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.impinj.stp.StpApi.internal_static_Impinj_STP_Packet_descriptor;
      }

      public com.impinj.stp.StpApi.Packet getDefaultInstanceForType() {
        return com.impinj.stp.StpApi.Packet.getDefaultInstance();
      }

      public com.impinj.stp.StpApi.Packet build() {
        com.impinj.stp.StpApi.Packet result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.impinj.stp.StpApi.Packet buildPartial() {
        com.impinj.stp.StpApi.Packet result = new com.impinj.stp.StpApi.Packet(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (commandBuilder_ == null) {
          result.command_ = command_;
        } else {
          result.command_ = commandBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (responseBuilder_ == null) {
          result.response_ = response_;
        } else {
          result.response_ = responseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (reportBuilder_ == null) {
          result.report_ = report_;
        } else {
          result.report_ = reportBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (updateBuilder_ == null) {
          result.update_ = update_;
        } else {
          result.update_ = updateBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.impinj.stp.StpApi.Packet) {
          return mergeFrom((com.impinj.stp.StpApi.Packet)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.impinj.stp.StpApi.Packet other) {
        if (other == com.impinj.stp.StpApi.Packet.getDefaultInstance()) return this;
        if (other.hasCommand()) {
          mergeCommand(other.getCommand());
        }
        if (other.hasResponse()) {
          mergeResponse(other.getResponse());
        }
        if (other.hasReport()) {
          mergeReport(other.getReport());
        }
        if (other.hasUpdate()) {
          mergeUpdate(other.getUpdate());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasCommand()) {
          if (!getCommand().isInitialized()) {
            
            return false;
          }
        }
        if (hasResponse()) {
          if (!getResponse().isInitialized()) {
            
            return false;
          }
        }
        if (hasReport()) {
          if (!getReport().isInitialized()) {
            
            return false;
          }
        }
        if (hasUpdate()) {
          if (!getUpdate().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.impinj.stp.StpApi.Packet parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.impinj.stp.StpApi.Packet) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Impinj.STP.Command command = 3;
      private com.impinj.stp.StpApi.Command command_ = com.impinj.stp.StpApi.Command.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Command, com.impinj.stp.StpApi.Command.Builder, com.impinj.stp.StpApi.CommandOrBuilder> commandBuilder_;
      /**
       *
       * to reader
       */
      public boolean hasCommand() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       *
       * to reader
       */
      public com.impinj.stp.StpApi.Command getCommand() {
        if (commandBuilder_ == null) {
          return command_;
        } else {
          return commandBuilder_.getMessage();
        }
      }
      /**
       *
       * to reader
       */
      public Builder setCommand(com.impinj.stp.StpApi.Command value) {
        if (commandBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          command_ = value;
          onChanged();
        } else {
          commandBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * to reader
       */
      public Builder setCommand(
          com.impinj.stp.StpApi.Command.Builder builderForValue) {
        if (commandBuilder_ == null) {
          command_ = builderForValue.build();
          onChanged();
        } else {
          commandBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * to reader
       */
      public Builder mergeCommand(com.impinj.stp.StpApi.Command value) {
        if (commandBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              command_ != com.impinj.stp.StpApi.Command.getDefaultInstance()) {
            command_ =
              com.impinj.stp.StpApi.Command.newBuilder(command_).mergeFrom(value).buildPartial();
          } else {
            command_ = value;
          }
          onChanged();
        } else {
          commandBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       *
       * to reader
       */
      public Builder clearCommand() {
        if (commandBuilder_ == null) {
          command_ = com.impinj.stp.StpApi.Command.getDefaultInstance();
          onChanged();
        } else {
          commandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       *
       * to reader
       */
      public com.impinj.stp.StpApi.Command.Builder getCommandBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getCommandFieldBuilder().getBuilder();
      }
      /**
       *
       * to reader
       */
      public com.impinj.stp.StpApi.CommandOrBuilder getCommandOrBuilder() {
        if (commandBuilder_ != null) {
          return commandBuilder_.getMessageOrBuilder();
        } else {
          return command_;
        }
      }
      /**
       *
       * to reader
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Command, com.impinj.stp.StpApi.Command.Builder, com.impinj.stp.StpApi.CommandOrBuilder> 
          getCommandFieldBuilder() {
        if (commandBuilder_ == null) {
          commandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Command, com.impinj.stp.StpApi.Command.Builder, com.impinj.stp.StpApi.CommandOrBuilder>(
                  command_,
                  getParentForChildren(),
                  isClean());
          command_ = null;
        }
        return commandBuilder_;
      }

      // optional .Impinj.STP.Response response = 4;
      private com.impinj.stp.StpApi.Response response_ = com.impinj.stp.StpApi.Response.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Response, com.impinj.stp.StpApi.Response.Builder, com.impinj.stp.StpApi.ResponseOrBuilder> responseBuilder_;
      /**
       *
       * to host
       */
      public boolean hasResponse() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       *
       * to host
       */
      public com.impinj.stp.StpApi.Response getResponse() {
        if (responseBuilder_ == null) {
          return response_;
        } else {
          return responseBuilder_.getMessage();
        }
      }
      /**
       *
       * to host
       */
      public Builder setResponse(com.impinj.stp.StpApi.Response value) {
        if (responseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          response_ = value;
          onChanged();
        } else {
          responseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * to host
       */
      public Builder setResponse(
          com.impinj.stp.StpApi.Response.Builder builderForValue) {
        if (responseBuilder_ == null) {
          response_ = builderForValue.build();
          onChanged();
        } else {
          responseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * to host
       */
      public Builder mergeResponse(com.impinj.stp.StpApi.Response value) {
        if (responseBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              response_ != com.impinj.stp.StpApi.Response.getDefaultInstance()) {
            response_ =
              com.impinj.stp.StpApi.Response.newBuilder(response_).mergeFrom(value).buildPartial();
          } else {
            response_ = value;
          }
          onChanged();
        } else {
          responseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       *
       * to host
       */
      public Builder clearResponse() {
        if (responseBuilder_ == null) {
          response_ = com.impinj.stp.StpApi.Response.getDefaultInstance();
          onChanged();
        } else {
          responseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       *
       * to host
       */
      public com.impinj.stp.StpApi.Response.Builder getResponseBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getResponseFieldBuilder().getBuilder();
      }
      /**
       *
       * to host
       */
      public com.impinj.stp.StpApi.ResponseOrBuilder getResponseOrBuilder() {
        if (responseBuilder_ != null) {
          return responseBuilder_.getMessageOrBuilder();
        } else {
          return response_;
        }
      }
      /**
       *
       * to host
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Response, com.impinj.stp.StpApi.Response.Builder, com.impinj.stp.StpApi.ResponseOrBuilder> 
          getResponseFieldBuilder() {
        if (responseBuilder_ == null) {
          responseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Response, com.impinj.stp.StpApi.Response.Builder, com.impinj.stp.StpApi.ResponseOrBuilder>(
                  response_,
                  getParentForChildren(),
                  isClean());
          response_ = null;
        }
        return responseBuilder_;
      }

      // optional .Impinj.STP.Report report = 5;
      private com.impinj.stp.StpApi.Report report_ = com.impinj.stp.StpApi.Report.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Report, com.impinj.stp.StpApi.Report.Builder, com.impinj.stp.StpApi.ReportOrBuilder> reportBuilder_;
      /**
       *
       * Async message to host.
       */
      public boolean hasReport() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       *
       * Async message to host.
       */
      public com.impinj.stp.StpApi.Report getReport() {
        if (reportBuilder_ == null) {
          return report_;
        } else {
          return reportBuilder_.getMessage();
        }
      }
      /**
       *
       * Async message to host.
       */
      public Builder setReport(com.impinj.stp.StpApi.Report value) {
        if (reportBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          report_ = value;
          onChanged();
        } else {
          reportBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Async message to host.
       */
      public Builder setReport(
          com.impinj.stp.StpApi.Report.Builder builderForValue) {
        if (reportBuilder_ == null) {
          report_ = builderForValue.build();
          onChanged();
        } else {
          reportBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Async message to host.
       */
      public Builder mergeReport(com.impinj.stp.StpApi.Report value) {
        if (reportBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              report_ != com.impinj.stp.StpApi.Report.getDefaultInstance()) {
            report_ =
              com.impinj.stp.StpApi.Report.newBuilder(report_).mergeFrom(value).buildPartial();
          } else {
            report_ = value;
          }
          onChanged();
        } else {
          reportBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       *
       * Async message to host.
       */
      public Builder clearReport() {
        if (reportBuilder_ == null) {
          report_ = com.impinj.stp.StpApi.Report.getDefaultInstance();
          onChanged();
        } else {
          reportBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       *
       * Async message to host.
       */
      public com.impinj.stp.StpApi.Report.Builder getReportBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getReportFieldBuilder().getBuilder();
      }
      /**
       *
       * Async message to host.
       */
      public com.impinj.stp.StpApi.ReportOrBuilder getReportOrBuilder() {
        if (reportBuilder_ != null) {
          return reportBuilder_.getMessageOrBuilder();
        } else {
          return report_;
        }
      }
      /**
       *
       * Async message to host.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Report, com.impinj.stp.StpApi.Report.Builder, com.impinj.stp.StpApi.ReportOrBuilder> 
          getReportFieldBuilder() {
        if (reportBuilder_ == null) {
          reportBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Report, com.impinj.stp.StpApi.Report.Builder, com.impinj.stp.StpApi.ReportOrBuilder>(
                  report_,
                  getParentForChildren(),
                  isClean());
          report_ = null;
        }
        return reportBuilder_;
      }

      // optional .Impinj.STP.Update update = 6;
      private com.impinj.stp.StpApi.Update update_ = com.impinj.stp.StpApi.Update.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Update, com.impinj.stp.StpApi.Update.Builder, com.impinj.stp.StpApi.UpdateOrBuilder> updateBuilder_;
      /**
       *
       * Async message to reader.
       */
      public boolean hasUpdate() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       *
       * Async message to reader.
       */
      public com.impinj.stp.StpApi.Update getUpdate() {
        if (updateBuilder_ == null) {
          return update_;
        } else {
          return updateBuilder_.getMessage();
        }
      }
      /**
       *
       * Async message to reader.
       */
      public Builder setUpdate(com.impinj.stp.StpApi.Update value) {
        if (updateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          update_ = value;
          onChanged();
        } else {
          updateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Async message to reader.
       */
      public Builder setUpdate(
          com.impinj.stp.StpApi.Update.Builder builderForValue) {
        if (updateBuilder_ == null) {
          update_ = builderForValue.build();
          onChanged();
        } else {
          updateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Async message to reader.
       */
      public Builder mergeUpdate(com.impinj.stp.StpApi.Update value) {
        if (updateBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              update_ != com.impinj.stp.StpApi.Update.getDefaultInstance()) {
            update_ =
              com.impinj.stp.StpApi.Update.newBuilder(update_).mergeFrom(value).buildPartial();
          } else {
            update_ = value;
          }
          onChanged();
        } else {
          updateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       *
       * Async message to reader.
       */
      public Builder clearUpdate() {
        if (updateBuilder_ == null) {
          update_ = com.impinj.stp.StpApi.Update.getDefaultInstance();
          onChanged();
        } else {
          updateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       *
       * Async message to reader.
       */
      public com.impinj.stp.StpApi.Update.Builder getUpdateBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getUpdateFieldBuilder().getBuilder();
      }
      /**
       *
       * Async message to reader.
       */
      public com.impinj.stp.StpApi.UpdateOrBuilder getUpdateOrBuilder() {
        if (updateBuilder_ != null) {
          return updateBuilder_.getMessageOrBuilder();
        } else {
          return update_;
        }
      }
      /**
       *
       * Async message to reader.
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.impinj.stp.StpApi.Update, com.impinj.stp.StpApi.Update.Builder, com.impinj.stp.StpApi.UpdateOrBuilder> 
          getUpdateFieldBuilder() {
        if (updateBuilder_ == null) {
          updateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.impinj.stp.StpApi.Update, com.impinj.stp.StpApi.Update.Builder, com.impinj.stp.StpApi.UpdateOrBuilder>(
                  update_,
                  getParentForChildren(),
                  isClean());
          update_ = null;
        }
        return updateBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Impinj.STP.Packet)
    }

    static {
      defaultInstance = new Packet(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Impinj.STP.Packet)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Reply_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Reply_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_DeviceState_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_DeviceState_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Version_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Version_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Versions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Versions_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_HandShake_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_HandShake_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Region_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Region_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Timestamp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Timestamp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_ConnectCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_ConnectCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetDeviceStateCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetDeviceStateCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetVersionsReaderCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetVersionsReaderCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_StopCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_StopCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_ConnectResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_ConnectResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetDeviceStateResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetDeviceStateResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetVersionsReaderResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetVersionsReaderResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_InvalidResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_InvalidResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_StopResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_StopResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_DeviceConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_DeviceConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TriggerConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TriggerConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_StartTriggerConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_StartTriggerConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_StopTriggerConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_StopTriggerConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GPIConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GPIConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GPOConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GPOConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_STPDevice_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_STPDevice_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OperationResponsibility_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OperationResponsibility_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_VoidTagResponsibility_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_VoidTagResponsibility_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OperationSummaryReportConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OperationSummaryReportConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TagOperationReportConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TagOperationReportConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_ReportConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_ReportConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AntennaConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AntennaConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AntennasConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AntennasConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_InventoryJob_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_InventoryJob_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_CartonContentsJob_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_CartonContentsJob_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_VoidTagConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_VoidTagConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Filter_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Filter_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SerializationJobFilters_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SerializationJobFilters_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SerializationJob_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SerializationJob_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_PCWord_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_PCWord_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_EPCMemory_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_EPCMemory_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TIDMemory_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TIDMemory_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Serialization_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Serialization_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_MonzaSelfSerialization_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_MonzaSelfSerialization_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SerialNumberRange_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SerialNumberRange_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_UserMemory_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_UserMemory_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Password_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Password_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_LockConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_LockConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_BlockPermalockConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_BlockPermalockConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_MonzaR6PFeatureConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_MonzaR6PFeatureConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_MonzaS6CFeatureConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_MonzaS6CFeatureConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_MonzaR6FeatureConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_MonzaR6FeatureConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_MonzaR6AFeatureConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_MonzaR6AFeatureConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TIDTableEntry_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TIDTableEntry_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TIDTableEntries_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TIDTableEntries_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OrderedListEntry_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OrderedListEntry_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OrderedListEntries_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OrderedListEntries_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_LowEncodeVolumeEventConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_LowEncodeVolumeEventConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_DeviceEventConfig_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_DeviceEventConfig_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OperationSummaryReport_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OperationSummaryReport_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TagOperationReport_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TagOperationReport_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_CartonContentsTag_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_CartonContentsTag_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_CartonContentsReport_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_CartonContentsReport_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_CartonContentsError_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_CartonContentsError_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TagModeMetrics_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TagModeMetrics_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_TagMetrics_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_TagMetrics_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_InterDeviceCommunicationMetrics_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_InterDeviceCommunicationMetrics_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OperationMetrics_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OperationMetrics_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OperationDataDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OperationDataDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OperationData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OperationData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_LicenseKey_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_LicenseKey_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_OperationEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_OperationEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_DeviceExceptionEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_DeviceExceptionEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GPIEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GPIEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_LowEncodeVolumeEvent_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_LowEncodeVolumeEvent_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_DeviceEventReport_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_DeviceEventReport_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetAntennaConfigCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetAntennaConfigCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetAntennaConfigCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetAntennaConfigCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_StartCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_StartCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetDeviceConfigCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetDeviceConfigCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetDeviceConfigCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetDeviceConfigCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_EngageCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_EngageCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_DisengageCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_DisengageCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetOperationResultGPOCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetOperationResultGPOCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddSerializationJobCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddSerializationJobCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_RemoveSerializationJobCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_RemoveSerializationJobCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetInventoryJobCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetInventoryJobCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetCartonContentsJobCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetCartonContentsJobCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetOperationDataCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetOperationDataCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddLicenseKeyCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddLicenseKeyCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddTIDTableEntriesCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddTIDTableEntriesCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddOrderedListEntriesCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddOrderedListEntriesCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_StartResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_StartResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetDeviceConfigResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetDeviceConfigResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetDeviceConfigResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetDeviceConfigResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetAntennaConfigResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetAntennaConfigResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetAntennaConfigResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetAntennaConfigResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_EngageResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_EngageResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_DisengageResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_DisengageResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetOperationResultGPOResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetOperationResultGPOResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddSerializationJobResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddSerializationJobResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_RemoveSerializationJobResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_RemoveSerializationJobResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetInventoryJobResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetInventoryJobResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_SetCartonContentsJobResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_SetCartonContentsJobResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_GetOperationDataResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_GetOperationDataResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddLicenseKeyResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddLicenseKeyResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddTIDTableEntriesResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddTIDTableEntriesResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_AddOrderedListEntriesResp_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_AddOrderedListEntriesResp_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Command_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Command_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Response_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Response_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Report_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Report_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Update_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Update_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Impinj_STP_Packet_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Impinj_STP_Packet_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\rstp_api.proto\022\nImpinj.STP\"H\n\005Reply\022)\n\n" +
      "error_code\030\001 \002(\0162\025.Impinj.STP.ErrorCode\022" +
      "\024\n\014error_string\030\002 \001(\t\"\231\001\n\013DeviceState\022@\n" +
      "\026device_operating_state\030\001 \001(\0162 .Impinj.S" +
      "TP.DeviceOperatingState\0221\n\014device_fault\030" +
      "\002 \001(\0162\033.Impinj.STP.DeviceFaultType\022\025\n\rfa" +
      "ult_details\030\003 \001(\t\"\207\001\n\007Version\022+\n\nversion" +
      "_ID\030\001 \002(\0162\027.Impinj.STP.VersionType\022\r\n\005ma" +
      "jor\030\002 \001(\r\022\r\n\005minor\030\003 \001(\r\022\023\n\013maintenance\030" +
      "\004 \001(\r\022\r\n\005build\030\005 \001(\r\022\r\n\005ident\030\006 \001(\t\"5\n\010V",
      "ersions\022)\n\014version_list\030\001 \003(\0132\023.Impinj.S" +
      "TP.Version\"2\n\tHandShake\022\020\n\010API_name\030\001 \002(" +
      "\t\022\023\n\013API_version\030\002 \002(\r\"z\n\006Region\022R\n\tregi" +
      "on_id\030\001 \002(\0162\034.Impinj.STP.RegulatoryRegio" +
      "n:!REGULATORY_REGION_FCC_PART_15_247\022\034\n\024" +
      "fixed_frequency_list\030\002 \003(\r\")\n\tTimestamp\022" +
      "\034\n\024useconds_since_epoch\030\001 \001(\004\";\n\016Connect" +
      "Command\022)\n\nhand_shake\030\001 \001(\0132\025.Impinj.STP" +
      ".HandShake\")\n\025GetDeviceStateCommand\022\020\n\010r" +
      "eserved\030\001 \001(\010\",\n\030GetVersionsReaderComman",
      "d\022\020\n\010reserved\030\001 \001(\010\"\037\n\013StopCommand\022\020\n\010re" +
      "served\030\001 \001(\010\"Z\n\013ConnectResp\022 \n\005reply\030\001 \001" +
      "(\0132\021.Impinj.STP.Reply\022)\n\nhand_shake\030\002 \001(" +
      "\0132\025.Impinj.STP.HandShake\"e\n\022GetDeviceSta" +
      "teResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP.Reply" +
      "\022-\n\014device_state\030\002 \001(\0132\027.Impinj.STP.Devi" +
      "ceState\"a\n\025GetVersionsReaderResp\022 \n\005repl" +
      "y\030\001 \001(\0132\021.Impinj.STP.Reply\022&\n\010versions\030\002" +
      " \001(\0132\024.Impinj.STP.Versions\"\037\n\013InvalidRes" +
      "p\022\020\n\010reserved\030\001 \001(\010\",\n\010StopResp\022 \n\005reply",
      "\030\001 \001(\0132\021.Impinj.STP.Reply\"\305\003\n\014DeviceConf" +
      "ig\022\"\n\006region\030\002 \001(\0132\022.Impinj.STP.Region\022B" +
      "\n\013device_mode\030\003 \002(\0162\026.Impinj.STP.DeviceM" +
      "ode:\025DEVICE_MODE_INVENTORY\022L\n\016operation_" +
      "mode\030\004 \002(\0162\031.Impinj.STP.OperationMode:\031O" +
      "PERATION_MODE_CONTINUOUS\022E\n\030operation_re" +
      "sponsibility\030\005 \001(\0132#.Impinj.STP.Operatio" +
      "nResponsibility\0221\n\016trigger_config\030\006 \001(\0132" +
      "\031.Impinj.STP.TriggerConfig\022)\n\nGPI_config" +
      "\030\007 \001(\0132\025.Impinj.STP.GPIConfig\022)\n\nGPO_con",
      "fig\030\010 \001(\0132\025.Impinj.STP.GPOConfig\022/\n\rrepo" +
      "rt_config\030\t \001(\0132\030.Impinj.STP.ReportConfi" +
      "g\"\211\001\n\rTriggerConfig\022<\n\024start_trigger_con" +
      "fig\030\001 \001(\0132\036.Impinj.STP.StartTriggerConfi" +
      "g\022:\n\023stop_trigger_config\030\002 \001(\0132\035.Impinj." +
      "STP.StopTriggerConfig\"<\n\022StartTriggerCon" +
      "fig\022&\n\030enable_gpi_start_trigger\030\001 \001(\010:\004t" +
      "rue\"N\n\021StopTriggerConfig\022%\n\027enable_gpi_s" +
      "top_trigger\030\001 \001(\010:\004true\022\022\n\007timeout\030\004 \001(\r" +
      ":\0010\"\273\002\n\tGPIConfig\022M\n\016signaling_mode\030\001 \001(",
      "\0162\032.Impinj.STP.GPIOSignalMode:\031GPIO_SIGN" +
      "AL_MODE_COMBINED\022I\n\rGPI1_polarity\030\002 \001(\0162" +
      "\030.Impinj.STP.GPIOPolarity:\030GPIO_POLARITY" +
      "_ACTIVE_LOW\022I\n\rGPI2_polarity\030\003 \001(\0162\030.Imp" +
      "inj.STP.GPIOPolarity:\030GPIO_POLARITY_ACTI" +
      "VE_LOW\022I\n\rGPI3_polarity\030\004 \001(\0162\030.Impinj.S" +
      "TP.GPIOPolarity:\030GPIO_POLARITY_ACTIVE_LO" +
      "W\"\205\003\n\tGPOConfig\022M\n\016signaling_mode\030\001 \001(\0162" +
      "\032.Impinj.STP.GPIOSignalMode:\031GPIO_SIGNAL" +
      "_MODE_SEPARATE\022I\n\rGPO1_polarity\030\006 \001(\0162\030.",
      "Impinj.STP.GPIOPolarity:\030GPIO_POLARITY_A" +
      "CTIVE_LOW\022I\n\rGPO2_polarity\030\002 \001(\0162\030.Impin" +
      "j.STP.GPIOPolarity:\030GPIO_POLARITY_ACTIVE" +
      "_LOW\022I\n\rGPO3_polarity\030\003 \001(\0162\030.Impinj.STP" +
      ".GPIOPolarity:\030GPIO_POLARITY_ACTIVE_LOW\022" +
      "\035\n\022GPO_pulse_duration\030\004 \001(\r:\0011\022)\n\033enable" +
      "_operation_result_gpo\030\005 \001(\010:\004true\"\035\n\tSTP" +
      "Device\022\020\n\010hostname\030\001 \002(\t\"\304\005\n\027OperationRe" +
      "sponsibility\022!\n\017EPC_memory_mask\030\001 \001(\014:\010\\" +
      "377\\377\022 \n\022EPC_memory_pc_word\030\002 \001(\010:\004tru",
      "e\022\035\n\017TID_config_word\030\022 \001(\010:\004true\022:\n\020user" +
      "_memory_mask\030\003 \001(\014: \\377\\377\\377\\377\\377" +
      "\\377\\377\\377\022\035\n\017secure_password\030\004 \001(\010:\004t" +
      "rue\022\035\n\017access_password\030\005 \001(\010:\004true\022\033\n\rki" +
      "ll_password\030\006 \001(\010:\004true\022\031\n\013lock_config\030\007" +
      " \001(\010:\004true\022#\n\025blockpermalock_config\030\010 \001(" +
      "\010:\004true\022\026\n\010kill_tag\030\n \001(\010:\004true\022)\n\033tag_s" +
      "pecific_feature_config\030\021 \001(\010:\004true\022\035\n\022ta" +
      "gs_in_view_count\030\013 \001(\r:\0016\022&\n\033tags_in_pip" +
      "eline_view_count\030\014 \001(\r:\0010\022:\n\033downstream_",
      "pipeline_devices\030\r \003(\0132\025.Impinj.STP.STPD" +
      "evice\022/\n\020device_of_record\030\016 \001(\0132\025.Impinj" +
      ".STP.STPDevice\0223\n+voyantic_tagsurance_te" +
      "st_results_cache_size\030\017 \001(\r\022B\n\027void_tag_" +
      "responsibility\030\020 \001(\0132!.Impinj.STP.VoidTa" +
      "gResponsibility\"\202\001\n\025VoidTagResponsibilit" +
      "y\022\035\n\017pc_word_to_zero\030\001 \001(\010:\004true\022\035\n\017firs" +
      "t_epc_words\030\002 \001(\010:\004true\022\027\n\tpermalock\030\003 \001" +
      "(\010:\004true\022\022\n\004kill\030\004 \001(\010:\004true\"N\n\034Operatio" +
      "nSummaryReportConfig\022.\n enable_operation",
      "_summary_reports\030\001 \002(\010:\004true\"\301\003\n\030TagOper" +
      "ationReportConfig\022*\n\034enable_tag_operatio" +
      "n_reports\030\001 \002(\010:\004true\0221\n\"enable_tag_oper" +
      "ation_retry_reports\030\002 \001(\010:\005false\022s\n\034tag_" +
      "operation_report_trigger\030\003 \001(\0162%.Impinj." +
      "STP.TagOperationReportTrigger:&TAG_OPERA" +
      "TION_REPORT_TRIGGER_IMMEDIATE\0220\n!enable_" +
      "reporting_over_serial_port\030\004 \001(\010:\005false\022" +
      "4\n%send_serial_report_after_GPO_deassert" +
      "\030\005 \001(\010:\005false\022*\n\033enable_epc_in_serial_re",
      "port\030\006 \001(\010:\005false\022=\n.enable_tag_operatio" +
      "n_pass_already_done_reports\030\007 \001(\010:\005false" +
      "\"\350\001\n\014ReportConfig\022:\n\023device_event_config" +
      "\030\001 \001(\0132\035.Impinj.STP.DeviceEventConfig\022Q\n" +
      "\037operation_summary_report_config\030\002 \001(\0132(" +
      ".Impinj.STP.OperationSummaryReportConfig" +
      "\022I\n\033tag_operation_report_config\030\003 \001(\0132$." +
      "Impinj.STP.TagOperationReportConfig\"\372\004\n\r" +
      "AntennaConfig\022\022\n\nantenna_ID\030\001 \002(\r\022A\n\tgen" +
      "2_mode\030\004 \001(\0162\024.Impinj.STP.Gen2Mode:\030GEN2",
      "_MODE_MAX_THROUGHPUT\022y\n\025inventory_search" +
      "_mode\030\005 \001(\0162\037.Impinj.STP.InventorySearch" +
      "Mode:9INVENTORY_SEARCH_MODE_SINGLE_TARGE" +
      "T_A_TO_B_MONZA_TAGFOCUS\022=\n\014gen2_session\030" +
      "\006 \001(\0162\027.Impinj.STP.Gen2Session:\016GEN2_SES" +
      "SION_1\022\034\n\016transmit_power\030\007 \001(\021:\0043000\022\033\n\023" +
      "receive_sensitivity\030\010 \001(\021\022#\n\027tag_populat" +
      "ion_estimate\030\n \001(\r:\00232\022\035\n\022minimum_dwell_" +
      "time\030\013 \001(\r:\0010\022\035\n\022maximum_dwell_time\030\014 \001(" +
      "\r:\0010\022*\n\033enable_query_for_q_increase\030\r \001(",
      "\010:\005false\022*\n\033enable_query_for_q_decrease\030" +
      "\016 \001(\010:\005false\022*\n\033enable_query_at_u_cycle_" +
      "end\030\017 \001(\010:\005false\0226\n\'enable_adaptive_tag_" +
      "population_estimate\030\020 \001(\010:\005false\"C\n\016Ante" +
      "nnasConfig\0221\n\016antenna_config\030\001 \003(\0132\031.Imp" +
      "inj.STP.AntennaConfig\"N\n\014InventoryJob\022\021\n" +
      "\006job_id\030\001 \001(\r:\0011\022+\n\013user_memory\030\002 \001(\0132\026." +
      "Impinj.STP.UserMemory\"\345\001\n\021CartonContents" +
      "Job\022\021\n\006job_id\030\001 \001(\r:\0011\022\034\n\024enter_trigger_" +
      "offset\030\006 \001(\r\022\033\n\023exit_trigger_offset\030\007 \001(",
      "\r\022\027\n\017carton_velocity\030\004 \001(\r\022\026\n\010read_tid\030\010" +
      " \001(\010:\004true\022\026\n\016carton_spacing\030\005 \001(\r\022\034\n\024st" +
      "art_trigger_offset\030\002 \001(\r\022\033\n\023stop_trigger" +
      "_offset\030\003 \001(\r\">\n\rVoidTagConfig\022\020\n\010kill_t" +
      "ag\030\001 \001(\010\022\033\n\023permalock_all_banks\030\002 \001(\010\"<\n" +
      "\006Filter\022\014\n\004data\030\001 \001(\014\022\014\n\004mask\030\002 \001(\014\022\026\n\013w" +
      "ord_offset\030\003 \001(\r:\0010\"k\n\027SerializationJobF" +
      "ilters\022\'\n\013tid_filters\030\001 \003(\0132\022.Impinj.STP" +
      ".Filter\022\'\n\013epc_filters\030\002 \003(\0132\022.Impinj.ST" +
      "P.Filter\"\210\t\n\020SerializationJob\022\016\n\006job_id\030",
      "\001 \002(\r\0222\n\010job_type\030\002 \002(\0162 .Impinj.STP.Ser" +
      "ializationJobType\022{\n\027job_completion_crit" +
      "eria\030\003 \001(\0162..Impinj.STP.SerializationJob" +
      "CompletionCriteria:*SERIALIZATION_JOB_CO" +
      "MPLETION_CRITERIA_NONE\022\032\n\022operation_quan" +
      "tity\030\004 \001(\r\022)\n\nEPC_memory\030\005 \001(\0132\025.Impinj." +
      "STP.EPCMemory\022)\n\nTID_memory\030\006 \001(\0132\025.Impi" +
      "nj.STP.TIDMemory\022+\n\013user_memory\030\007 \001(\0132\026." +
      "Impinj.STP.UserMemory\022-\n\017secure_password" +
      "\030\010 \001(\0132\024.Impinj.STP.Password\022-\n\017access_p",
      "assword\030\t \001(\0132\024.Impinj.STP.Password\022+\n\rk" +
      "ill_password\030\n \001(\0132\024.Impinj.STP.Password" +
      "\022+\n\013lock_config\030\013 \001(\0132\026.Impinj.STP.LockC" +
      "onfig\022?\n\025blockpermalock_config\030\014 \001(\0132 .I" +
      "mpinj.STP.BlockPermalockConfig\022\020\n\010kill_t" +
      "ag\030\020 \001(\010\022C\n\030monza_r6p_feature_config\030\024 \001" +
      "(\0132!.Impinj.STP.MonzaR6PFeatureConfig\022C\n" +
      "\030monza_s6c_feature_config\030\025 \001(\0132!.Impinj" +
      ".STP.MonzaS6CFeatureConfig\022A\n\027monza_r6_f" +
      "eature_config\030\026 \001(\0132 .Impinj.STP.MonzaR6",
      "FeatureConfig\022C\n\030monza_r6a_feature_confi" +
      "g\030\027 \001(\0132!.Impinj.STP.MonzaR6AFeatureConf" +
      "ig\022\033\n\016TID_table_size\030\021 \001(\r:\003100\0224\n\021TID_t" +
      "able_entries\030\016 \003(\0132\031.Impinj.STP.TIDTable" +
      "Entry\022:\n\024ordered_list_entries\030\017 \003(\0132\034.Im" +
      "pinj.STP.OrderedListEntry\0222\n\017void_tag_co" +
      "nfig\030\022 \001(\0132\031.Impinj.STP.VoidTagConfig\0224\n" +
      "\007filters\030\023 \001(\0132#.Impinj.STP.Serializatio" +
      "nJobFilters\"$\n\006PCWord\022\014\n\004data\030\001 \001(\014\022\014\n\004m" +
      "ask\030\002 \001(\014\"~\n\tEPCMemory\022\014\n\004data\030\001 \001(\014\022\014\n\004",
      "mask\030\002 \001(\014\0220\n\rserialization\030\003 \001(\0132\031.Impi" +
      "nj.STP.Serialization\022#\n\007pc_word\030\004 \001(\0132\022." +
      "Impinj.STP.PCWord\"1\n\tTIDMemory\022\014\n\004data\030\001" +
      " \002(\014\022\026\n\013word_offset\030\003 \001(\r:\0010\"\255\001\n\rSeriali" +
      "zation\022\032\n\022serialization_bits\030\001 \002(\r\022D\n\030mo" +
      "nza_self_serialization\030\006 \001(\0132\".Impinj.ST" +
      "P.MonzaSelfSerialization\022:\n\023serial_numbe" +
      "r_range\030\007 \001(\0132\035.Impinj.STP.SerialNumberR" +
      "ange\"6\n\026MonzaSelfSerialization\022\034\n\024serial" +
      "ization_prefix\030\001 \001(\t\"\264\001\n\021SerialNumberRan",
      "ge\022!\n\031serial_number_range_start\030\001 \001(\004\022\037\n" +
      "\027serial_number_range_end\030\002 \001(\004\022\022\n\nbit_of" +
      "fset\030\003 \001(\r\022G\n\032serial_number_range_format" +
      "\030\004 \001(\0162#.Impinj.STP.SerialNumberRangeFor" +
      "mat\"[\n\nUserMemory\022\014\n\004data\030\001 \001(\014\022\014\n\004mask\030" +
      "\002 \001(\014\022\026\n\013word_offset\030\003 \001(\r:\0010\022\031\n\016word_co" +
      "unt_inv\030\004 \001(\r:\0010\"\205\001\n\010Password\022k\n\032passwor" +
      "d_generation_method\030\001 \001(\0162$.Impinj.STP.P" +
      "asswordGenerationMethod:!PASSWORD_GENERA" +
      "TION_METHOD_STATIC\022\014\n\004data\030\002 \002(\014\")\n\nLock",
      "Config\022\033\n\023lock_config_payload\030\001 \002(\014\"A\n\024B" +
      "lockPermalockConfig\022\025\n\rblock_pointer\030\001 \002" +
      "(\r\022\022\n\nblock_mask\030\002 \002(\014\"\222\001\n\025MonzaR6PFeatu" +
      "reConfig\022\030\n\020enable_auto_tune\030\001 \001(\010\022\037\n\027en" +
      "able_short_range_mode\030\002 \001(\010\022>\n\021memory_ma" +
      "p_config\030\004 \001(\0162#.Impinj.STP.MonzaR6PMemo" +
      "ryMapConfig\"R\n\025MonzaS6CFeatureConfig\022\030\n\020" +
      "enable_auto_tune\030\001 \001(\010\022\037\n\027enable_short_r" +
      "ange_mode\030\002 \001(\010\"0\n\024MonzaR6FeatureConfig\022" +
      "\030\n\020enable_auto_tune\030\001 \001(\010\"R\n\025MonzaR6AFea",
      "tureConfig\022\030\n\020enable_auto_tune\030\001 \001(\010\022\037\n\027" +
      "enable_short_range_mode\030\002 \001(\010\"\316\005\n\rTIDTab" +
      "leEntry\022\013\n\003TID\030\001 \002(\014\022)\n\nEPC_memory\030\003 \001(\013" +
      "2\025.Impinj.STP.EPCMemory\022)\n\nTID_memory\030\004 " +
      "\001(\0132\025.Impinj.STP.TIDMemory\022+\n\013user_memor" +
      "y\030\005 \001(\0132\026.Impinj.STP.UserMemory\022-\n\017secur" +
      "e_password\030\006 \001(\0132\024.Impinj.STP.Password\022-" +
      "\n\017access_password\030\007 \001(\0132\024.Impinj.STP.Pas" +
      "sword\022+\n\rkill_password\030\010 \001(\0132\024.Impinj.ST" +
      "P.Password\022+\n\013lock_config\030\t \001(\0132\026.Impinj",
      ".STP.LockConfig\022?\n\025blockpermalock_config" +
      "\030\n \001(\0132 .Impinj.STP.BlockPermalockConfig" +
      "\022\020\n\010kill_tag\030\014 \001(\010\022\020\n\010void_tag\030\r \001(\010\022C\n\030" +
      "monza_r6p_feature_config\030\016 \001(\0132!.Impinj." +
      "STP.MonzaR6PFeatureConfig\022C\n\030monza_s6c_f" +
      "eature_config\030\017 \001(\0132!.Impinj.STP.MonzaS6" +
      "CFeatureConfig\022A\n\027monza_r6_feature_confi" +
      "g\030\020 \001(\0132 .Impinj.STP.MonzaR6FeatureConfi" +
      "g\022C\n\030monza_r6a_feature_config\030\021 \001(\0132!.Im" +
      "pinj.STP.MonzaR6AFeatureConfig\"G\n\017TIDTab",
      "leEntries\0224\n\021tid_table_entries\030\001 \003(\0132\031.I" +
      "mpinj.STP.TIDTableEntry\"\240\005\n\020OrderedListE" +
      "ntry\022)\n\nEPC_memory\030\001 \002(\0132\025.Impinj.STP.EP" +
      "CMemory\022+\n\013user_memory\030\002 \001(\0132\026.Impinj.ST" +
      "P.UserMemory\022-\n\017secure_password\030\003 \001(\0132\024." +
      "Impinj.STP.Password\022-\n\017access_password\030\004" +
      " \001(\0132\024.Impinj.STP.Password\022+\n\rkill_passw" +
      "ord\030\005 \001(\0132\024.Impinj.STP.Password\022+\n\013lock_" +
      "config\030\006 \001(\0132\026.Impinj.STP.LockConfig\022?\n\025" +
      "blockpermalock_config\030\007 \001(\0132 .Impinj.STP",
      ".BlockPermalockConfig\022)\n\nTID_memory\030\010 \001(" +
      "\0132\025.Impinj.STP.TIDMemory\022C\n\030monza_r6p_fe" +
      "ature_config\030\n \001(\0132!.Impinj.STP.MonzaR6P" +
      "FeatureConfig\022C\n\030monza_s6c_feature_confi" +
      "g\030\013 \001(\0132!.Impinj.STP.MonzaS6CFeatureConf" +
      "ig\022A\n\027monza_r6_feature_config\030\014 \001(\0132 .Im" +
      "pinj.STP.MonzaR6FeatureConfig\022C\n\030monza_r" +
      "6a_feature_config\030\r \001(\0132!.Impinj.STP.Mon" +
      "zaR6AFeatureConfig\"P\n\022OrderedListEntries" +
      "\022:\n\024ordered_list_entries\030\001 \003(\0132\034.Impinj.",
      "STP.OrderedListEntry\"\341\001\n\032LowEncodeVolume" +
      "EventConfig\022-\n\037enable_low_encode_volume_" +
      "events\030\001 \001(\010:\004true\022\037\n\017monza_threshold\030\002 " +
      "\001(\004:\006200000\022#\n\023non_monza_threshold\030\003 \001(\004" +
      ":\006200000\022$\n\025monza_reminder_period\030\004 \001(\r:" +
      "\00550000\022(\n\031non_monza_reminder_period\030\005 \001(" +
      "\r:\00550000\"\254\001\n\021DeviceEventConfig\022%\n\027enable" +
      "_operation_events\030\001 \001(\010:\004true\022 \n\021enable_" +
      "GPI_events\030\003 \001(\010:\005false\022N\n\036low_encode_vo" +
      "lume_event_config\030\006 \001(\0132&.Impinj.STP.Low",
      "EncodeVolumeEventConfig\"\250\002\n\026OperationSum" +
      "maryReport\022(\n\ttimestamp\030\001 \002(\0132\025.Impinj.S" +
      "TP.Timestamp\022<\n\020operation_result\030\002 \002(\0162\"" +
      ".Impinj.STP.OperationSummaryResult\022\037\n\027op" +
      "eration_result_detail\030\003 \001(\t\022\036\n\026operation" +
      "_elapsed_time\030\004 \001(\r\022!\n\031tag_operation_tot" +
      "al_count\030\005 \001(\r\022 \n\030tag_operation_pass_cou" +
      "nt\030\006 \001(\r\022 \n\030tag_operation_fail_count\030\007 \001" +
      "(\r\"\236\005\n\022TagOperationReport\022E\n\031tag_operati" +
      "on_report_type\030\001 \002(\0162\".Impinj.STP.TagOpe",
      "rationReportType\022<\n\024tag_operation_result" +
      "\030\002 \001(\0162\036.Impinj.STP.TagOperationResult\022#" +
      "\n\033tag_operation_result_detail\030\003 \001(\t\022\013\n\003T" +
      "ID\030\004 \001(\014\022\013\n\003EPC\030\005 \001(\014\022\025\n\rEPC_attempted\030\006" +
      " \001(\014\022\027\n\017user_memory_inv\030\023 \001(\014\022\031\n\021EPC_mem" +
      "ory_result\030\007 \001(\010\022\036\n\026access_password_resu" +
      "lt\030\010 \001(\010\022\034\n\024kill_password_result\030\t \001(\010\022\032" +
      "\n\022lock_config_result\030\n \001(\010\022\032\n\022user_memor" +
      "y_result\030\013 \001(\010\022\035\n\025blockpermalock_result\030" +
      "\014 \001(\010\022\027\n\017kill_tag_result\030\022 \001(\010\022\026\n\016pc_wor",
      "d_result\030\024 \001(\010\022*\n\"tag_specific_feature_c" +
      "onfig_result\030\025 \001(\010\022\030\n\020tid_write_result\030\026" +
      " \001(\010\022(\n\ttimestamp\030\r \001(\0132\025.Impinj.STP.Tim" +
      "estamp\022\022\n\nantenna_ID\030\016 \001(\r\022\021\n\tfrequency\030" +
      "\017 \001(\r\022\014\n\004RSSI\030\020 \001(\021\022\016\n\006job_id\030\021 \001(\r\"w\n\021C" +
      "artonContentsTag\022\013\n\003tid\030\001 \001(\014\022\013\n\003epc\030\002 \001" +
      "(\014\022\022\n\nconfidence\030\003 \001(\r\022\020\n\010metric_1\030\004 \001(\r" +
      "\022\020\n\010metric_2\030\005 \001(\r\022\020\n\010metric_3\030\006 \001(\r\"\247\003\n" +
      "\024CartonContentsReport\022@\n\026carton_contents" +
      "_result\030\001 \001(\0162 .Impinj.STP.CartonContent",
      "sResult\022.\n\017enter_timestamp\030\005 \001(\0132\025.Impin" +
      "j.STP.Timestamp\022-\n\016exit_timestamp\030\006 \001(\0132" +
      "\025.Impinj.STP.Timestamp\022\023\n\013carton_size\030\007 " +
      "\001(\r\022:\n\023carton_contents_tag\030\004 \003(\0132\035.Impin" +
      "j.STP.CartonContentsTag\022>\n\025carton_conten" +
      "ts_error\030\010 \003(\0132\037.Impinj.STP.CartonConten" +
      "tsError\022.\n\017start_timestamp\030\002 \001(\0132\025.Impin" +
      "j.STP.Timestamp\022-\n\016stop_timestamp\030\003 \001(\0132" +
      "\025.Impinj.STP.Timestamp\"\332\001\n\023CartonContent" +
      "sError\0227\n\nerror_type\030\001 \001(\0162#.Impinj.STP.",
      "CartonContentsErrorType\022.\n\017extra_timesta" +
      "mp\030\002 \001(\0132\025.Impinj.STP.Timestamp\022,\n\rmin_t" +
      "imestamp\030\003 \001(\0132\025.Impinj.STP.Timestamp\022,\n" +
      "\rmax_timestamp\030\004 \001(\0132\025.Impinj.STP.Timest" +
      "amp\"a\n\016TagModeMetrics\022\023\n\013total_count\030\001 \001" +
      "(\004\022\022\n\npass_count\030\002 \001(\004\022\022\n\nfail_count\030\003 \001" +
      "(\004\022\022\n\nvoid_count\030\004 \001(\004\"\271\002\n\nTagMetrics\022\020\n" +
      "\010tag_chip\030\001 \001(\014\0228\n\024verify_basic_metrics\030" +
      "\002 \001(\0132\032.Impinj.STP.TagModeMetrics\0227\n\023ver" +
      "ify_data_metrics\030\003 \001(\0132\032.Impinj.STP.TagM",
      "odeMetrics\0222\n\016encode_metrics\030\004 \001(\0132\032.Imp" +
      "inj.STP.TagModeMetrics\0225\n\021inventory_metr" +
      "ics\030\005 \001(\0132\032.Impinj.STP.TagModeMetrics\022;\n" +
      "\027carton_contents_metrics\030\006 \001(\0132\032.Impinj." +
      "STP.TagModeMetrics\"X\n\037InterDeviceCommuni" +
      "cationMetrics\022\025\n\rserial_number\030\001 \001(\t\022\036\n\026" +
      "received_message_count\030\002 \001(\004\"\336\001\n\020Operati" +
      "onMetrics\022#\n\033remaining_non_monza_encodes" +
      "\030\001 \001(\004\022+\n\013tag_metrics\030\002 \003(\0132\026.Impinj.STP" +
      ".TagMetrics\022W\n\"inter_device_communicatio",
      "n_metrics\030\003 \003(\0132+.Impinj.STP.InterDevice" +
      "CommunicationMetrics\022\037\n\027remaining_monza_" +
      "encodes\030\005 \001(\004\"\352\001\n\024OperationDataDetails\022\025" +
      "\n\rserial_number\030\001 \001(\t\022\030\n\020firmware_versio" +
      "n\030\002 \001(\t\022\016\n\006region\030\003 \001(\t\022\032\n\022installed_fea" +
      "tures\030\004 \003(\t\022\037\n\027non_monza_volume_key_id\030\005" +
      " \001(\r\0227\n\021operation_metrics\030\006 \001(\0132\034.Impinj" +
      ".STP.OperationMetrics\022\033\n\023monza_volume_ke" +
      "y_id\030\007 \001(\r\"Z\n\rOperationData\022;\n\021operation" +
      "_details\030\001 \001(\0132 .Impinj.STP.OperationDat",
      "aDetails\022\014\n\004data\030\002 \003(\t\")\n\nLicenseKey\022\033\n\023" +
      "license_key_payload\030\001 \002(\014\"\272\001\n\016OperationE" +
      "vent\022(\n\ttimestamp\030\001 \002(\0132\025.Impinj.STP.Tim" +
      "estamp\022<\n\024operation_event_type\030\002 \002(\0162\036.I" +
      "mpinj.STP.OperationEventType\022@\n\026operatio" +
      "n_trigger_type\030\003 \001(\0162 .Impinj.STP.Operat" +
      "ionTriggerType\"\245\001\n\024DeviceExceptionEvent\022" +
      "(\n\ttimestamp\030\001 \002(\0132\025.Impinj.STP.Timestam" +
      "p\022I\n\033device_exception_event_type\030\002 \002(\0162$" +
      ".Impinj.STP.DeviceExceptionEventType\022\030\n\020",
      "exception_detail\030\003 \002(\t\"G\n\010GPIEvent\022(\n\tti" +
      "mestamp\030\001 \002(\0132\025.Impinj.STP.Timestamp\022\021\n\t" +
      "gpi_state\030\002 \002(\r\"\250\001\n\024LowEncodeVolumeEvent" +
      "\022J\n\034low_encode_volume_event_type\030\001 \001(\0162$" +
      ".Impinj.STP.LowEncodeVolumeEventType\022\037\n\027" +
      "remaining_monza_encodes\030\002 \001(\004\022#\n\033remaini" +
      "ng_non_monza_encodes\030\003 \001(\004\"\366\001\n\021DeviceEve" +
      "ntReport\0223\n\017operation_event\030\001 \001(\0132\032.Impi" +
      "nj.STP.OperationEvent\022\'\n\tGPI_event\030\003 \001(\013" +
      "2\024.Impinj.STP.GPIEvent\022@\n\026device_excepti",
      "on_event\030\005 \001(\0132 .Impinj.STP.DeviceExcept" +
      "ionEvent\022A\n\027low_encode_volume_event\030\006 \001(" +
      "\0132 .Impinj.STP.LowEncodeVolumeEvent\"+\n\027G" +
      "etAntennaConfigCommand\022\020\n\010reserved\030\001 \001(\010" +
      "\"N\n\027SetAntennaConfigCommand\0223\n\017antennas_" +
      "config\030\001 \001(\0132\032.Impinj.STP.AntennasConfig" +
      "\" \n\014StartCommand\022\020\n\010reserved\030\001 \001(\010\"I\n\026Se" +
      "tDeviceConfigCommand\022/\n\rdevice_config\030\001 " +
      "\002(\0132\030.Impinj.STP.DeviceConfig\"*\n\026GetDevi" +
      "ceConfigCommand\022\020\n\010reserved\030\001 \001(\010\"!\n\rEng",
      "ageCommand\022\020\n\010reserved\030\001 \001(\010\"$\n\020Disengag" +
      "eCommand\022\020\n\010reserved\030\001 \001(\010\"d\n\034SetOperati" +
      "onResultGPOCommand\022D\n\030operation_summary_" +
      "result\030\001 \001(\0162\".Impinj.STP.OperationSumma" +
      "ryResult\"U\n\032AddSerializationJobCommand\0227" +
      "\n\021serialization_job\030\001 \001(\0132\034.Impinj.STP.S" +
      "erializationJob\"/\n\035RemoveSerializationJo" +
      "bCommand\022\016\n\006job_id\030\001 \001(\r\"I\n\026SetInventory" +
      "JobCommand\022/\n\rinventory_job\030\001 \001(\0132\030.Impi" +
      "nj.STP.InventoryJob\"Y\n\033SetCartonContents",
      "JobCommand\022:\n\023carton_contents_job\030\001 \001(\0132" +
      "\035.Impinj.STP.CartonContentsJob\"+\n\027GetOpe" +
      "rationDataCommand\022\020\n\010reserved\030\001 \001(\010\"C\n\024A" +
      "ddLicenseKeyCommand\022+\n\013license_key\030\001 \001(\013" +
      "2\026.Impinj.STP.LicenseKey\"O\n\031AddTIDTableE" +
      "ntriesCommand\0222\n\rtable_entries\030\001 \001(\0132\033.I" +
      "mpinj.STP.TIDTableEntries\"\\\n\034AddOrderedL" +
      "istEntriesCommand\022<\n\024ordered_list_entrie" +
      "s\030\001 \001(\0132\036.Impinj.STP.OrderedListEntries\"" +
      "-\n\tStartResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP",
      ".Reply\"7\n\023SetDeviceConfigResp\022 \n\005reply\030\001" +
      " \001(\0132\021.Impinj.STP.Reply\"h\n\023GetDeviceConf" +
      "igResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP.Reply" +
      "\022/\n\rdevice_config\030\002 \001(\0132\030.Impinj.STP.Dev" +
      "iceConfig\"8\n\024SetAntennaConfigResp\022 \n\005rep" +
      "ly\030\001 \001(\0132\021.Impinj.STP.Reply\"m\n\024GetAntenn" +
      "aConfigResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP." +
      "Reply\0223\n\017antennas_config\030\002 \001(\0132\032.Impinj." +
      "STP.AntennasConfig\".\n\nEngageResp\022 \n\005repl" +
      "y\030\001 \001(\0132\021.Impinj.STP.Reply\"1\n\rDisengageR",
      "esp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP.Reply\"=\n" +
      "\031SetOperationResultGPOResp\022 \n\005reply\030\001 \001(" +
      "\0132\021.Impinj.STP.Reply\";\n\027AddSerialization" +
      "JobResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP.Repl" +
      "y\">\n\032RemoveSerializationJobResp\022 \n\005reply" +
      "\030\001 \001(\0132\021.Impinj.STP.Reply\"7\n\023SetInventor" +
      "yJobResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP.Rep" +
      "ly\"<\n\030SetCartonContentsJobResp\022 \n\005reply\030" +
      "\001 \001(\0132\021.Impinj.STP.Reply\"k\n\024GetOperation" +
      "DataResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.STP.Rep",
      "ly\0221\n\016operation_data\030\002 \001(\0132\031.Impinj.STP." +
      "OperationData\"5\n\021AddLicenseKeyResp\022 \n\005re" +
      "ply\030\001 \001(\0132\021.Impinj.STP.Reply\":\n\026AddTIDTa" +
      "bleEntriesResp\022 \n\005reply\030\001 \001(\0132\021.Impinj.S" +
      "TP.Reply\"=\n\031AddOrderedListEntriesResp\022 \n" +
      "\005reply\030\001 \001(\0132\021.Impinj.STP.Reply\"\350\t\n\007Comm" +
      "and\022+\n\007connect\030\001 \001(\0132\032.Impinj.STP.Connec" +
      "tCommand\022A\n\023get_versions_reader\030\002 \001(\0132$." +
      "Impinj.STP.GetVersionsReaderCommand\022\'\n\005s" +
      "tart\030\007 \001(\0132\030.Impinj.STP.StartCommand\022%\n\004",
      "stop\030\010 \001(\0132\027.Impinj.STP.StopCommand\022;\n\020g" +
      "et_device_state\030\031 \001(\0132!.Impinj.STP.GetDe" +
      "viceStateCommand\022>\n\021set_device_config\030\200^" +
      " \001(\0132\".Impinj.STP.SetDeviceConfigCommand" +
      "\022>\n\021get_device_config\030\201^ \001(\0132\".Impinj.ST" +
      "P.GetDeviceConfigCommand\022@\n\022set_antenna_" +
      "config\030\202^ \001(\0132#.Impinj.STP.SetAntennaCon" +
      "figCommand\022@\n\022get_antenna_config\030\203^ \001(\0132" +
      "#.Impinj.STP.GetAntennaConfigCommand\022*\n\006" +
      "engage\030\204^ \001(\0132\031.Impinj.STP.EngageCommand",
      "\0220\n\tdisengage\030\205^ \001(\0132\034.Impinj.STP.Diseng" +
      "ageCommand\022K\n\030set_operation_result_gpo\030\206" +
      "^ \001(\0132(.Impinj.STP.SetOperationResultGPO" +
      "Command\022F\n\025add_serialization_job\030\207^ \001(\0132" +
      "&.Impinj.STP.AddSerializationJobCommand\022" +
      "L\n\030remove_serialization_job\030\210^ \001(\0132).Imp" +
      "inj.STP.RemoveSerializationJobCommand\022E\n" +
      "\025add_tid_table_entries\030\211^ \001(\0132%.Impinj.S" +
      "TP.AddTIDTableEntriesCommand\022K\n\030add_orde" +
      "red_list_entries\030\212^ \001(\0132(.Impinj.STP.Add",
      "OrderedListEntriesCommand\022>\n\021set_invento" +
      "ry_job\030\213^ \001(\0132\".Impinj.STP.SetInventoryJ" +
      "obCommand\022I\n\027set_carton_contents_job\030\214^ " +
      "\001(\0132\'.Impinj.STP.SetCartonContentsJobCom" +
      "mand\022@\n\022get_operation_data\030\215^ \001(\0132#.Impi" +
      "nj.STP.GetOperationDataCommand\022:\n\017add_li" +
      "cense_key\030\216^ \001(\0132 .Impinj.STP.AddLicense" +
      "KeyCommand\"\327\t\n\010Response\022(\n\007connect\030\001 \001(\013" +
      "2\027.Impinj.STP.ConnectResp\022>\n\023get_version" +
      "s_reader\030\002 \001(\0132!.Impinj.STP.GetVersionsR",
      "eaderResp\022$\n\005start\030\007 \001(\0132\025.Impinj.STP.St" +
      "artResp\022\"\n\004stop\030\010 \001(\0132\024.Impinj.STP.StopR" +
      "esp\022(\n\007invalid\030\017 \001(\0132\027.Impinj.STP.Invali" +
      "dResp\0228\n\020get_device_state\030\031 \001(\0132\036.Impinj" +
      ".STP.GetDeviceStateResp\022;\n\021set_device_co" +
      "nfig\030\200^ \001(\0132\037.Impinj.STP.SetDeviceConfig" +
      "Resp\022;\n\021get_device_config\030\201^ \001(\0132\037.Impin" +
      "j.STP.GetDeviceConfigResp\022=\n\022set_antenna" +
      "_config\030\202^ \001(\0132 .Impinj.STP.SetAntennaCo" +
      "nfigResp\022=\n\022get_antenna_config\030\203^ \001(\0132 .",
      "Impinj.STP.GetAntennaConfigResp\022\'\n\006engag" +
      "e\030\204^ \001(\0132\026.Impinj.STP.EngageResp\022-\n\tdise" +
      "ngage\030\205^ \001(\0132\031.Impinj.STP.DisengageResp\022" +
      "H\n\030set_operation_result_gpo\030\211^ \001(\0132%.Imp" +
      "inj.STP.SetOperationResultGPOResp\022C\n\025add" +
      "_serialization_job\030\212^ \001(\0132#.Impinj.STP.A" +
      "ddSerializationJobResp\022I\n\030remove_seriali" +
      "zation_job\030\213^ \001(\0132&.Impinj.STP.RemoveSer" +
      "ializationJobResp\022B\n\025add_tid_table_entri" +
      "es\030\214^ \001(\0132\".Impinj.STP.AddTIDTableEntrie",
      "sResp\022H\n\030add_ordered_list_entries\030\215^ \001(\013" +
      "2%.Impinj.STP.AddOrderedListEntriesResp\022" +
      ";\n\021set_inventory_job\030\216^ \001(\0132\037.Impinj.STP" +
      ".SetInventoryJobResp\022F\n\027set_carton_conte" +
      "nts_job\030\217^ \001(\0132$.Impinj.STP.SetCartonCon" +
      "tentsJobResp\022=\n\022get_operation_data\030\220^ \001(" +
      "\0132 .Impinj.STP.GetOperationDataResp\0227\n\017a" +
      "dd_license_key\030\221^ \001(\0132\035.Impinj.STP.AddLi" +
      "censeKeyResp\"\212\002\n\006Report\022:\n\023device_event_" +
      "report\030\001 \001(\0132\035.Impinj.STP.DeviceEventRep",
      "ort\022<\n\024tag_operation_report\030\002 \001(\0132\036.Impi" +
      "nj.STP.TagOperationReport\022D\n\030operation_s" +
      "ummary_report\030\003 \001(\0132\".Impinj.STP.Operati" +
      "onSummaryReport\022@\n\026carton_contents_repor" +
      "t\030\004 \001(\0132 .Impinj.STP.CartonContentsRepor" +
      "t\"N\n\006Update\022D\n\025add_tid_table_entries\030\001 \001" +
      "(\0132%.Impinj.STP.AddTIDTableEntriesComman" +
      "d\"\236\001\n\006Packet\022$\n\007command\030\003 \001(\0132\023.Impinj.S" +
      "TP.Command\022&\n\010response\030\004 \001(\0132\024.Impinj.ST" +
      "P.Response\022\"\n\006report\030\005 \001(\0132\022.Impinj.STP.",
      "Report\022\"\n\006update\030\006 \001(\0132\022.Impinj.STP.Upda" +
      "te*\237\003\n\tErrorCode\022\026\n\022ERROR_CODE_SUCCESS\020\000" +
      "\022\036\n\032ERROR_CODE_INVALID_COMMAND\020\001\022\036\n\032ERRO" +
      "R_CODE_INVALID_SET_KEY\020\002\022\036\n\032ERROR_CODE_I" +
      "NVALID_GET_KEY\020\003\022\036\n\032ERROR_CODE_INVALID_A" +
      "DDRESS\020\004\022\034\n\030ERROR_CODE_INVALID_VALUE\020\005\022\037" +
      "\n\033ERROR_CODE_FIRMWARE_INVALID\020\006\022\036\n\032ERROR" +
      "_CODE_COMMAND_REFUSED\020\007\022 \n\034ERROR_CODE_SE" +
      "T_KEY_READ_ONLY\020\010\022\033\n\027ERROR_CODE_NO_HANDS" +
      "HAKE\020\t\022#\n\037ERROR_CODE_NO_DEVICE_CONNECTIO",
      "N\020\n\022\032\n\026ERROR_CODE_UNSUPPORTED\020\013\022\033\n\027ERROR" +
      "_CODE_NETWORK_INIT\020\014*]\n\013Gen2Session\022\022\n\016G" +
      "EN2_SESSION_0\020\000\022\022\n\016GEN2_SESSION_1\020\001\022\022\n\016G" +
      "EN2_SESSION_2\020\002\022\022\n\016GEN2_SESSION_3\020\003*\244\001\n\024" +
      "DeviceOperatingState\022 \n\034DEVICE_OPERATING" +
      "_STATE_READY\020\000\022$\n DEVICE_OPERATING_STATE" +
      "_OPERATING\020\001\022\"\n\036DEVICE_OPERATING_STATE_E" +
      "NGAGED\020\002\022 \n\034DEVICE_OPERATING_STATE_FAULT" +
      "\020\003*\246\001\n\017DeviceFaultType\022\032\n\026DEVICE_FAULT_T" +
      "YPE_NONE\020\000\022(\n$DEVICE_FAULT_TYPE_NETWORK_",
      "DISCONNECT\020\001\022)\n%DEVICE_FAULT_TYPE_APPLIC" +
      "ATION_FAILURE\020\002\022\"\n\036DEVICE_FAULT_TYPE_FPG" +
      "A_FAILURE\020\003*\232\002\n\013VersionType\022\034\n\030VERSION_T" +
      "YPE_KODIAK_HOST\020\000\022\036\n\032VERSION_TYPE_KODIAK" +
      "_READER\020\001\022\035\n\031VERSION_TYPE_FRAME_READER\020\002" +
      "\022\031\n\025VERSION_TYPE_API_HOST\020\003\022\033\n\027VERSION_T" +
      "YPE_API_READER\020\004\022\031\n\025VERSION_TYPE_FIRMWAR" +
      "E\020\005\022\036\n\032VERSION_TYPE_FIRMWARE_CUST\020\006\022\036\n\032V" +
      "ERSION_TYPE_UPGRADE_AGENT\020\007\022\033\n\027VERSION_T" +
      "YPE_FPGA_IMAGE\020\010*\234\t\n\020RegulatoryRegion\022%\n",
      "!REGULATORY_REGION_FCC_PART_15_247\020\000\022%\n!" +
      "REGULATORY_REGION_ETSI_EN_300_220\020\001\022)\n%R" +
      "EGULATORY_REGION_ETSI_EN_302_208_LBT\020\002\022+" +
      "\n\'REGULATORY_REGION_HONG_KONG_920_925_MH" +
      "Z\020\003\022(\n$REGULATORY_REGION_TAIWAN_922_928_" +
      "MHZ\020\004\022\'\n#REGULATORY_REGION_JAPAN_952_954" +
      "_MHZ\020\005\0220\n,REGULATORY_REGION_JAPAN_952_95" +
      "4_MHZ_LOWPOWER\020\006\022,\n(REGULATORY_REGION_ET" +
      "SI_EN_302_208_V1_2_1\020\007\022\'\n#REGULATORY_REG" +
      "ION_KOREA_917_921_MHZ\020\010\022*\n&REGULATORY_RE",
      "GION_MALAYSIA_919_921_MHZ\020\t\022\'\n#REGULATOR" +
      "Y_REGION_CHINA_920_925_MHZ\020\n\022.\n*REGULATO" +
      "RY_REGION_JAPAN_952_956_MHZ_NO_LBT\020\013\022.\n*" +
      "REGULATORY_REGION_SOUTH_AFRICA_915_919_M" +
      "HZ\020\014\0224\n0REGULATORY_REGION_BRAZIL_902_907" +
      "_AND_915_928_MHZ\020\r\022*\n&REGULATORY_REGION_" +
      "THAILAND_920_925_MHZ\020\016\022+\n\'REGULATORY_REG" +
      "ION_SINGAPORE_920_925_MHZ\020\017\022+\n\'REGULATOR" +
      "Y_REGION_AUSTRALIA_920_926_MHZ\020\020\022\'\n#REGU" +
      "LATORY_REGION_INDIA_865_867_MHZ\020\021\022)\n%REG",
      "ULATORY_REGION_URUGUAY_916_928_MHZ\020\022\022)\n%" +
      "REGULATORY_REGION_VIETNAM_920_925_MHZ\020\023\022" +
      "(\n$REGULATORY_REGION_ISRAEL_915_917_MHZ\020" +
      "\024\022-\n)REGULATORY_REGION_PHILIPPINES_918_9" +
      "20_MHZ\020\025\022+\n\'REGULATORY_REGION_INDONESIA_" +
      "923_925_MHZ\020\026\022/\n+REGULATORY_REGION_NEW_Z" +
      "EALAND_921P5_928_MHZ\020\027\022.\n*REGULATORY_REG" +
      "ION_JAPAN_916_921_MHZ_NO_LBT\020\030\022/\n+REGULA" +
      "TORY_REGION_LATIN_AMERICA_902_928_MHZ\020\031*" +
      "4\n\tGPIOState\022\022\n\016GPIO_STATE_LOW\020\000\022\023\n\017GPIO",
      "_STATE_HIGH\020\001*K\n\014GPIOPolarity\022\034\n\030GPIO_PO" +
      "LARITY_ACTIVE_LOW\020\000\022\035\n\031GPIO_POLARITY_ACT" +
      "IVE_HIGH\020\001*\361\001\n\010Gen2Mode\022\034\n\030GEN2_MODE_MAX" +
      "_THROUGHPUT\020\000\022\024\n\020GEN2_MODE_HYBRID\020\001\022\035\n\031G" +
      "EN2_MODE_DENSE_READER_M4\020\002\022\035\n\031GEN2_MODE_" +
      "DENSE_READER_M8\020\003\022\030\n\024GEN2_MODE_MAX_MILLE" +
      "R\020\004\022\037\n\033GEN2_MODE_DENSE_READER_M4_2\020\005\022\037\n\033" +
      "GEN2_MODE_MAX_THROUGHPUT_M4\020\006\022\027\n\022GEN2_MO" +
      "DE_AUTO_SET\020\350\007*\356\002\n\023InventorySearchMode\022%" +
      "\n!INVENTORY_SEARCH_MODE_DUAL_TARGET\020\001\022.\n",
      "*INVENTORY_SEARCH_MODE_SINGLE_TARGET_A_T" +
      "O_B\020\002\022.\n*INVENTORY_SEARCH_MODE_SINGLE_TA" +
      "RGET_B_TO_A\020\003\022=\n9INVENTORY_SEARCH_MODE_S" +
      "INGLE_TARGET_A_TO_B_MONZA_TAGFOCUS\020\004\022=\n9" +
      "INVENTORY_SEARCH_MODE_SINGLE_TARGET_B_TO" +
      "_A_MONZA_TAGFOCUS\020\005\022(\n$INVENTORY_SEARCH_" +
      "MODE_CARTON_STAGE_1\020\007\022(\n$INVENTORY_SEARC" +
      "H_MODE_CARTON_STAGE_2\020\010*\247\001\n\nDeviceMode\022\031" +
      "\n\025DEVICE_MODE_INVENTORY\020\000\022\026\n\022DEVICE_MODE" +
      "_ENCODE\020\001\022$\n DEVICE_MODE_VERIFY_TAGCHIP_",
      "BASIC\020\002\022#\n\037DEVICE_MODE_VERIFY_TAGCHIP_DA" +
      "TA\020\003\022\033\n\027DEVICE_MODE_ITEM_VERIFY\020\006*c\n\rOpe" +
      "rationMode\022\030\n\024OPERATION_MODE_BATCH\020\000\022\031\n\025" +
      "OPERATION_MODE_SINGLE\020\001\022\035\n\031OPERATION_MOD" +
      "E_CONTINUOUS\020\002*w\n\016GPIOSignalMode\022\035\n\031GPIO" +
      "_SIGNAL_MODE_COMBINED\020\000\022\035\n\031GPIO_SIGNAL_M" +
      "ODE_SEPARATE\020\001\022\'\n#GPIO_SIGNAL_MODE_PRESE" +
      "NCE_DETECTION\020\002*\242\001\n\nReportType\022\023\n\017REPORT" +
      "_TYPE_ALL\020\000\022\034\n\030REPORT_TYPE_DEVICE_EVENT\020" +
      "\001\022!\n\035REPORT_TYPE_OPERATION_SUMMARY\020\002\022\035\n\031",
      "REPORT_TYPE_TAG_OPERATION\020\003\022\037\n\033REPORT_TY" +
      "PE_CARTON_CONTENTS\020\004*G\n\031TagOperationRepo" +
      "rtTrigger\022*\n&TAG_OPERATION_REPORT_TRIGGE" +
      "R_IMMEDIATE\020\001*^\n\026OperationSummaryResult\022" +
      "!\n\035OPERATION_SUMMARY_RESULT_PASS\020\000\022!\n\035OP" +
      "ERATION_SUMMARY_RESULT_FAIL\020\001*\202\r\n\022TagOpe" +
      "rationResult\022\035\n\031TAG_OPERATION_RESULT_PAS" +
      "S\020\000\022*\n&TAG_OPERATION_RESULT_PASS_ALREADY" +
      "_DONE\020\001\022\036\n\032TAG_OPERATION_RESULT_RETRY\020\002\022" +
      "1\n-TAG_OPERATION_RESULT_RETRY_INSUFFICIE",
      "NT_POWER\020\003\0223\n/TAG_OPERATION_RESULT_RETRY" +
      "_NO_RESPONSE_FROM_TAG\020\004\022<\n8TAG_OPERATION" +
      "_RESULT_RETRY_SERIALIZATION_JOB_QUEUE_EM" +
      "PTY\020\005\0221\n-TAG_OPERATION_RESULT_RETRY_TID_" +
      "TABLE_NO_MATCH\020\006\0221\n-TAG_OPERATION_RESULT" +
      "_RETRY_ORDERED_LIST_EMPTY\020\007\022\035\n\031TAG_OPERA" +
      "TION_RESULT_FAIL\020\010\0220\n,TAG_OPERATION_RESU" +
      "LT_FAIL_INSUFFICIENT_POWER\020\t\0222\n.TAG_OPER" +
      "ATION_RESULT_FAIL_NO_RESPONSE_FROM_TAG\020\n" +
      "\0220\n,TAG_OPERATION_RESULT_FAIL_MEMORY_BAN",
      "K_LOCKED\020\013\0228\n4TAG_OPERATION_RESULT_FAIL_" +
      "MEMORY_BANK_MEMORY_OVERRUN\020\014\022:\n6TAG_OPER" +
      "ATION_RESULT_FAIL_GEN2_INSUFFICIENT_PRIV" +
      "ILEGES\020\r\022;\n7TAG_OPERATION_RESULT_FAIL_SE" +
      "RIALIZATION_JOB_QUEUE_EMPTY\020\016\0220\n,TAG_OPE" +
      "RATION_RESULT_FAIL_TID_TABLE_NO_MATCH\020\017\022" +
      "0\n,TAG_OPERATION_RESULT_FAIL_ORDERED_LIS" +
      "T_EMPTY\020\020\0224\n0TAG_OPERATION_RESULT_FAIL_T" +
      "AG_CHIP_NOT_SUPPORTED\020\021\022J\nFTAG_OPERATION" +
      "_RESULT_FAIL_TAG_CHIP_SUPPORTED_LICENSE_",
      "KEY_NOT_INSTALLED\020\022\0221\n-TAG_OPERATION_RES" +
      "ULT_FAIL_TAG_NOT_INVENTORIED\020\023\022.\n*TAG_OP" +
      "ERATION_RESULT_FAIL_VOLUME_EXHAUSTED\020\024\022." +
      "\n*TAG_OPERATION_RESULT_FAIL_TID_PARITY_C" +
      "HECK\020\025\0227\n3TAG_OPERATION_RESULT_FAIL_SERI" +
      "AL_NUMBER_RANGE_EMPTY\020\026\022:\n6TAG_OPERATION" +
      "_RESULT_FAIL_VOYANTIC_TEST_RESULT_MISSIN" +
      "G\020\027\0229\n5TAG_OPERATION_RESULT_FAIL_VOYANTI" +
      "C_TEST_RESULT_FAILED\020\030\022&\n\"TAG_OPERATION_" +
      "RESULT_VOID_TAG_PASS\020\031\022&\n\"TAG_OPERATION_",
      "RESULT_VOID_TAG_FAIL\020\032\0226\n2TAG_OPERATION_" +
      "RESULT_FAIL_TID_TABLE_INVALID_CONFIG\020\033\022-" +
      "\n)TAG_OPERATION_RESULT_FAIL_FILTER_NO_MA" +
      "TCH\020\034\0224\n0TAG_OPERATION_RESULT_FAIL_VOLUM" +
      "E_LICENSE_REVOKED\020\035\0226\n2TAG_OPERATION_RES" +
      "ULT_FAIL_INVENTORIED_EPC_MISMATCH\020\036\022=\n9T" +
      "AG_OPERATION_RESULT_FAIL_CANNOT_CHANGE_M" +
      "EMORY_MAP_CONFIG\020\037*\210\001\n\024SerializationJobT" +
      "ype\022!\n\035SERIALIZATION_JOB_TYPE_STATIC\020\001\022$" +
      "\n SERIALIZATION_JOB_TYPE_TID_TABLE\020\004\022\'\n#",
      "SERIALIZATION_JOB_TYPE_ORDERED_LIST\020\005*T\n" +
      "\"SerializationJobCompletionCriteria\022.\n*S" +
      "ERIALIZATION_JOB_COMPLETION_CRITERIA_NON" +
      "E\020\004*a\n\027SerialNumberRangeFormat\022\"\n\036SERIAL" +
      "_NUMBER_RANGE_FORMAT_HEX\020\000\022\"\n\036SERIAL_NUM" +
      "BER_RANGE_FORMAT_DEC\020\001*A\n\030PasswordGenera" +
      "tionMethod\022%\n!PASSWORD_GENERATION_METHOD" +
      "_STATIC\020\001*\212\001\n\027MonzaR6PMemoryMapConfig\0226\n" +
      "2MONZA_R6P_MEMORY_MAP_CONFIG_96_BIT_EPC_" +
      "64_BIT_USER\020\000\0227\n3MONZA_R6P_MEMORY_MAP_CO",
      "NFIG_128_BIT_EPC_32_BIT_USER\020\001*\215\001\n\026TagOp" +
      "erationReportType\022\'\n#TAG_OPERATION_REPOR" +
      "T_TYPE_INVENTORY\020\000\022$\n TAG_OPERATION_REPO" +
      "RT_TYPE_VERIFY\020\001\022$\n TAG_OPERATION_REPORT" +
      "_TYPE_ENCODE\020\002*\213\001\n\024CartonContentsResult\022" +
      "\035\n\031CARTON_CONTENTS_RESULT_OK\020\001\022)\n%CARTON" +
      "_CONTENTS_RESULT_ERROR_NO_ENTER\020\003\022)\n%CAR" +
      "TON_CONTENTS_RESULT_ERROR_NO_START\020\002*\333\001\n" +
      "\027CartonContentsErrorType\022-\n)CARTON_CONTE" +
      "NTS_ERROR_EXTRA_LEADING_ENTER\020\001\022.\n*CARTO",
      "N_CONTENTS_ERROR_EXTRA_TRAILING_ENTER\020\002\022" +
      "/\n+CARTON_CONTENTS_ERROR_MISSING_LEADING" +
      "_ENTER\020\003\0220\n,CARTON_CONTENTS_ERROR_MISSIN" +
      "G_TRAILING_ENTER\020\004*\206\001\n\022OperationEventTyp" +
      "e\022&\n\"OPERATION_EVENT_TYPE_START_TRIGGER\020" +
      "\001\022%\n!OPERATION_EVENT_TYPE_STOP_TRIGGER\020\002" +
      "\022!\n\035OPERATION_EVENT_TYPE_COMPLETE\020\003*}\n\024O" +
      "perationTriggerType\022!\n\035OPERATION_TRIGGER" +
      "_TYPE_CLIENT\020\001\022\036\n\032OPERATION_TRIGGER_TYPE" +
      "_GPI\020\002\022\"\n\036OPERATION_TRIGGER_TYPE_TIMEOUT",
      "\020\004*\260\001\n\030DeviceExceptionEventType\022\'\n#DEVIC" +
      "E_EXCEPTION_EVENT_TYPE_UNKNOWN\020\001\022,\n(DEVI" +
      "CE_EXCEPTION_EVENT_TYPE_SYSTEM_FAULT\020\002\022=" +
      "\n9DEVICE_EXCEPTION_EVENT_TYPE_OPERATION_" +
      "START_TRIGGER_FAULT\020\003*d\n\030LowEncodeVolume" +
      "EventType\022!\n\035LOW_ENCODE_VOLUME_EVENT_MON" +
      "ZA\020\001\022%\n!LOW_ENCODE_VOLUME_EVENT_NON_MONZ" +
      "A\020\002B\030\n\016com.impinj.stpB\006StpApi"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_Impinj_STP_Reply_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_Impinj_STP_Reply_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Reply_descriptor,
              new java.lang.String[] { "ErrorCode", "ErrorString", });
          internal_static_Impinj_STP_DeviceState_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_Impinj_STP_DeviceState_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_DeviceState_descriptor,
              new java.lang.String[] { "DeviceOperatingState", "DeviceFault", "FaultDetails", });
          internal_static_Impinj_STP_Version_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_Impinj_STP_Version_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Version_descriptor,
              new java.lang.String[] { "VersionID", "Major", "Minor", "Maintenance", "Build", "Ident", });
          internal_static_Impinj_STP_Versions_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_Impinj_STP_Versions_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Versions_descriptor,
              new java.lang.String[] { "VersionList", });
          internal_static_Impinj_STP_HandShake_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_Impinj_STP_HandShake_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_HandShake_descriptor,
              new java.lang.String[] { "APIName", "APIVersion", });
          internal_static_Impinj_STP_Region_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_Impinj_STP_Region_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Region_descriptor,
              new java.lang.String[] { "RegionId", "FixedFrequencyList", });
          internal_static_Impinj_STP_Timestamp_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_Impinj_STP_Timestamp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Timestamp_descriptor,
              new java.lang.String[] { "UsecondsSinceEpoch", });
          internal_static_Impinj_STP_ConnectCommand_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_Impinj_STP_ConnectCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_ConnectCommand_descriptor,
              new java.lang.String[] { "HandShake", });
          internal_static_Impinj_STP_GetDeviceStateCommand_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_Impinj_STP_GetDeviceStateCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetDeviceStateCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_GetVersionsReaderCommand_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_Impinj_STP_GetVersionsReaderCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetVersionsReaderCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_StopCommand_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_Impinj_STP_StopCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_StopCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_ConnectResp_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_Impinj_STP_ConnectResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_ConnectResp_descriptor,
              new java.lang.String[] { "Reply", "HandShake", });
          internal_static_Impinj_STP_GetDeviceStateResp_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_Impinj_STP_GetDeviceStateResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetDeviceStateResp_descriptor,
              new java.lang.String[] { "Reply", "DeviceState", });
          internal_static_Impinj_STP_GetVersionsReaderResp_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_Impinj_STP_GetVersionsReaderResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetVersionsReaderResp_descriptor,
              new java.lang.String[] { "Reply", "Versions", });
          internal_static_Impinj_STP_InvalidResp_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_Impinj_STP_InvalidResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_InvalidResp_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_StopResp_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_Impinj_STP_StopResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_StopResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_DeviceConfig_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_Impinj_STP_DeviceConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_DeviceConfig_descriptor,
              new java.lang.String[] { "Region", "DeviceMode", "OperationMode", "OperationResponsibility", "TriggerConfig", "GPIConfig", "GPOConfig", "ReportConfig", });
          internal_static_Impinj_STP_TriggerConfig_descriptor =
            getDescriptor().getMessageTypes().get(17);
          internal_static_Impinj_STP_TriggerConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TriggerConfig_descriptor,
              new java.lang.String[] { "StartTriggerConfig", "StopTriggerConfig", });
          internal_static_Impinj_STP_StartTriggerConfig_descriptor =
            getDescriptor().getMessageTypes().get(18);
          internal_static_Impinj_STP_StartTriggerConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_StartTriggerConfig_descriptor,
              new java.lang.String[] { "EnableGpiStartTrigger", });
          internal_static_Impinj_STP_StopTriggerConfig_descriptor =
            getDescriptor().getMessageTypes().get(19);
          internal_static_Impinj_STP_StopTriggerConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_StopTriggerConfig_descriptor,
              new java.lang.String[] { "EnableGpiStopTrigger", "Timeout", });
          internal_static_Impinj_STP_GPIConfig_descriptor =
            getDescriptor().getMessageTypes().get(20);
          internal_static_Impinj_STP_GPIConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GPIConfig_descriptor,
              new java.lang.String[] { "SignalingMode", "GPI1Polarity", "GPI2Polarity", "GPI3Polarity", });
          internal_static_Impinj_STP_GPOConfig_descriptor =
            getDescriptor().getMessageTypes().get(21);
          internal_static_Impinj_STP_GPOConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GPOConfig_descriptor,
              new java.lang.String[] { "SignalingMode", "GPO1Polarity", "GPO2Polarity", "GPO3Polarity", "GPOPulseDuration", "EnableOperationResultGpo", });
          internal_static_Impinj_STP_STPDevice_descriptor =
            getDescriptor().getMessageTypes().get(22);
          internal_static_Impinj_STP_STPDevice_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_STPDevice_descriptor,
              new java.lang.String[] { "Hostname", });
          internal_static_Impinj_STP_OperationResponsibility_descriptor =
            getDescriptor().getMessageTypes().get(23);
          internal_static_Impinj_STP_OperationResponsibility_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OperationResponsibility_descriptor,
              new java.lang.String[] { "EPCMemoryMask", "EPCMemoryPcWord", "TIDConfigWord", "UserMemoryMask", "SecurePassword", "AccessPassword", "KillPassword", "LockConfig", "BlockpermalockConfig", "KillTag", "TagSpecificFeatureConfig", "TagsInViewCount", "TagsInPipelineViewCount", "DownstreamPipelineDevices", "DeviceOfRecord", "VoyanticTagsuranceTestResultsCacheSize", "VoidTagResponsibility", });
          internal_static_Impinj_STP_VoidTagResponsibility_descriptor =
            getDescriptor().getMessageTypes().get(24);
          internal_static_Impinj_STP_VoidTagResponsibility_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_VoidTagResponsibility_descriptor,
              new java.lang.String[] { "PcWordToZero", "FirstEpcWords", "Permalock", "Kill", });
          internal_static_Impinj_STP_OperationSummaryReportConfig_descriptor =
            getDescriptor().getMessageTypes().get(25);
          internal_static_Impinj_STP_OperationSummaryReportConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OperationSummaryReportConfig_descriptor,
              new java.lang.String[] { "EnableOperationSummaryReports", });
          internal_static_Impinj_STP_TagOperationReportConfig_descriptor =
            getDescriptor().getMessageTypes().get(26);
          internal_static_Impinj_STP_TagOperationReportConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TagOperationReportConfig_descriptor,
              new java.lang.String[] { "EnableTagOperationReports", "EnableTagOperationRetryReports", "TagOperationReportTrigger", "EnableReportingOverSerialPort", "SendSerialReportAfterGPODeassert", "EnableEpcInSerialReport", "EnableTagOperationPassAlreadyDoneReports", });
          internal_static_Impinj_STP_ReportConfig_descriptor =
            getDescriptor().getMessageTypes().get(27);
          internal_static_Impinj_STP_ReportConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_ReportConfig_descriptor,
              new java.lang.String[] { "DeviceEventConfig", "OperationSummaryReportConfig", "TagOperationReportConfig", });
          internal_static_Impinj_STP_AntennaConfig_descriptor =
            getDescriptor().getMessageTypes().get(28);
          internal_static_Impinj_STP_AntennaConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AntennaConfig_descriptor,
              new java.lang.String[] { "AntennaID", "Gen2Mode", "InventorySearchMode", "Gen2Session", "TransmitPower", "ReceiveSensitivity", "TagPopulationEstimate", "MinimumDwellTime", "MaximumDwellTime", "EnableQueryForQIncrease", "EnableQueryForQDecrease", "EnableQueryAtUCycleEnd", "EnableAdaptiveTagPopulationEstimate", });
          internal_static_Impinj_STP_AntennasConfig_descriptor =
            getDescriptor().getMessageTypes().get(29);
          internal_static_Impinj_STP_AntennasConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AntennasConfig_descriptor,
              new java.lang.String[] { "AntennaConfig", });
          internal_static_Impinj_STP_InventoryJob_descriptor =
            getDescriptor().getMessageTypes().get(30);
          internal_static_Impinj_STP_InventoryJob_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_InventoryJob_descriptor,
              new java.lang.String[] { "JobId", "UserMemory", });
          internal_static_Impinj_STP_CartonContentsJob_descriptor =
            getDescriptor().getMessageTypes().get(31);
          internal_static_Impinj_STP_CartonContentsJob_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_CartonContentsJob_descriptor,
              new java.lang.String[] { "JobId", "EnterTriggerOffset", "ExitTriggerOffset", "CartonVelocity", "ReadTid", "CartonSpacing", "StartTriggerOffset", "StopTriggerOffset", });
          internal_static_Impinj_STP_VoidTagConfig_descriptor =
            getDescriptor().getMessageTypes().get(32);
          internal_static_Impinj_STP_VoidTagConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_VoidTagConfig_descriptor,
              new java.lang.String[] { "KillTag", "PermalockAllBanks", });
          internal_static_Impinj_STP_Filter_descriptor =
            getDescriptor().getMessageTypes().get(33);
          internal_static_Impinj_STP_Filter_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Filter_descriptor,
              new java.lang.String[] { "Data", "Mask", "WordOffset", });
          internal_static_Impinj_STP_SerializationJobFilters_descriptor =
            getDescriptor().getMessageTypes().get(34);
          internal_static_Impinj_STP_SerializationJobFilters_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SerializationJobFilters_descriptor,
              new java.lang.String[] { "TidFilters", "EpcFilters", });
          internal_static_Impinj_STP_SerializationJob_descriptor =
            getDescriptor().getMessageTypes().get(35);
          internal_static_Impinj_STP_SerializationJob_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SerializationJob_descriptor,
              new java.lang.String[] { "JobId", "JobType", "JobCompletionCriteria", "OperationQuantity", "EPCMemory", "TIDMemory", "UserMemory", "SecurePassword", "AccessPassword", "KillPassword", "LockConfig", "BlockpermalockConfig", "KillTag", "MonzaR6PFeatureConfig", "MonzaS6CFeatureConfig", "MonzaR6FeatureConfig", "MonzaR6AFeatureConfig", "TIDTableSize", "TIDTableEntries", "OrderedListEntries", "VoidTagConfig", "Filters", });
          internal_static_Impinj_STP_PCWord_descriptor =
            getDescriptor().getMessageTypes().get(36);
          internal_static_Impinj_STP_PCWord_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_PCWord_descriptor,
              new java.lang.String[] { "Data", "Mask", });
          internal_static_Impinj_STP_EPCMemory_descriptor =
            getDescriptor().getMessageTypes().get(37);
          internal_static_Impinj_STP_EPCMemory_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_EPCMemory_descriptor,
              new java.lang.String[] { "Data", "Mask", "Serialization", "PcWord", });
          internal_static_Impinj_STP_TIDMemory_descriptor =
            getDescriptor().getMessageTypes().get(38);
          internal_static_Impinj_STP_TIDMemory_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TIDMemory_descriptor,
              new java.lang.String[] { "Data", "WordOffset", });
          internal_static_Impinj_STP_Serialization_descriptor =
            getDescriptor().getMessageTypes().get(39);
          internal_static_Impinj_STP_Serialization_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Serialization_descriptor,
              new java.lang.String[] { "SerializationBits", "MonzaSelfSerialization", "SerialNumberRange", });
          internal_static_Impinj_STP_MonzaSelfSerialization_descriptor =
            getDescriptor().getMessageTypes().get(40);
          internal_static_Impinj_STP_MonzaSelfSerialization_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_MonzaSelfSerialization_descriptor,
              new java.lang.String[] { "SerializationPrefix", });
          internal_static_Impinj_STP_SerialNumberRange_descriptor =
            getDescriptor().getMessageTypes().get(41);
          internal_static_Impinj_STP_SerialNumberRange_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SerialNumberRange_descriptor,
              new java.lang.String[] { "SerialNumberRangeStart", "SerialNumberRangeEnd", "BitOffset", "SerialNumberRangeFormat", });
          internal_static_Impinj_STP_UserMemory_descriptor =
            getDescriptor().getMessageTypes().get(42);
          internal_static_Impinj_STP_UserMemory_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_UserMemory_descriptor,
              new java.lang.String[] { "Data", "Mask", "WordOffset", "WordCountInv", });
          internal_static_Impinj_STP_Password_descriptor =
            getDescriptor().getMessageTypes().get(43);
          internal_static_Impinj_STP_Password_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Password_descriptor,
              new java.lang.String[] { "PasswordGenerationMethod", "Data", });
          internal_static_Impinj_STP_LockConfig_descriptor =
            getDescriptor().getMessageTypes().get(44);
          internal_static_Impinj_STP_LockConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_LockConfig_descriptor,
              new java.lang.String[] { "LockConfigPayload", });
          internal_static_Impinj_STP_BlockPermalockConfig_descriptor =
            getDescriptor().getMessageTypes().get(45);
          internal_static_Impinj_STP_BlockPermalockConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_BlockPermalockConfig_descriptor,
              new java.lang.String[] { "BlockPointer", "BlockMask", });
          internal_static_Impinj_STP_MonzaR6PFeatureConfig_descriptor =
            getDescriptor().getMessageTypes().get(46);
          internal_static_Impinj_STP_MonzaR6PFeatureConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_MonzaR6PFeatureConfig_descriptor,
              new java.lang.String[] { "EnableAutoTune", "EnableShortRangeMode", "MemoryMapConfig", });
          internal_static_Impinj_STP_MonzaS6CFeatureConfig_descriptor =
            getDescriptor().getMessageTypes().get(47);
          internal_static_Impinj_STP_MonzaS6CFeatureConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_MonzaS6CFeatureConfig_descriptor,
              new java.lang.String[] { "EnableAutoTune", "EnableShortRangeMode", });
          internal_static_Impinj_STP_MonzaR6FeatureConfig_descriptor =
            getDescriptor().getMessageTypes().get(48);
          internal_static_Impinj_STP_MonzaR6FeatureConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_MonzaR6FeatureConfig_descriptor,
              new java.lang.String[] { "EnableAutoTune", });
          internal_static_Impinj_STP_MonzaR6AFeatureConfig_descriptor =
            getDescriptor().getMessageTypes().get(49);
          internal_static_Impinj_STP_MonzaR6AFeatureConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_MonzaR6AFeatureConfig_descriptor,
              new java.lang.String[] { "EnableAutoTune", "EnableShortRangeMode", });
          internal_static_Impinj_STP_TIDTableEntry_descriptor =
            getDescriptor().getMessageTypes().get(50);
          internal_static_Impinj_STP_TIDTableEntry_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TIDTableEntry_descriptor,
              new java.lang.String[] { "TID", "EPCMemory", "TIDMemory", "UserMemory", "SecurePassword", "AccessPassword", "KillPassword", "LockConfig", "BlockpermalockConfig", "KillTag", "VoidTag", "MonzaR6PFeatureConfig", "MonzaS6CFeatureConfig", "MonzaR6FeatureConfig", "MonzaR6AFeatureConfig", });
          internal_static_Impinj_STP_TIDTableEntries_descriptor =
            getDescriptor().getMessageTypes().get(51);
          internal_static_Impinj_STP_TIDTableEntries_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TIDTableEntries_descriptor,
              new java.lang.String[] { "TidTableEntries", });
          internal_static_Impinj_STP_OrderedListEntry_descriptor =
            getDescriptor().getMessageTypes().get(52);
          internal_static_Impinj_STP_OrderedListEntry_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OrderedListEntry_descriptor,
              new java.lang.String[] { "EPCMemory", "UserMemory", "SecurePassword", "AccessPassword", "KillPassword", "LockConfig", "BlockpermalockConfig", "TIDMemory", "MonzaR6PFeatureConfig", "MonzaS6CFeatureConfig", "MonzaR6FeatureConfig", "MonzaR6AFeatureConfig", });
          internal_static_Impinj_STP_OrderedListEntries_descriptor =
            getDescriptor().getMessageTypes().get(53);
          internal_static_Impinj_STP_OrderedListEntries_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OrderedListEntries_descriptor,
              new java.lang.String[] { "OrderedListEntries", });
          internal_static_Impinj_STP_LowEncodeVolumeEventConfig_descriptor =
            getDescriptor().getMessageTypes().get(54);
          internal_static_Impinj_STP_LowEncodeVolumeEventConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_LowEncodeVolumeEventConfig_descriptor,
              new java.lang.String[] { "EnableLowEncodeVolumeEvents", "MonzaThreshold", "NonMonzaThreshold", "MonzaReminderPeriod", "NonMonzaReminderPeriod", });
          internal_static_Impinj_STP_DeviceEventConfig_descriptor =
            getDescriptor().getMessageTypes().get(55);
          internal_static_Impinj_STP_DeviceEventConfig_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_DeviceEventConfig_descriptor,
              new java.lang.String[] { "EnableOperationEvents", "EnableGPIEvents", "LowEncodeVolumeEventConfig", });
          internal_static_Impinj_STP_OperationSummaryReport_descriptor =
            getDescriptor().getMessageTypes().get(56);
          internal_static_Impinj_STP_OperationSummaryReport_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OperationSummaryReport_descriptor,
              new java.lang.String[] { "Timestamp", "OperationResult", "OperationResultDetail", "OperationElapsedTime", "TagOperationTotalCount", "TagOperationPassCount", "TagOperationFailCount", });
          internal_static_Impinj_STP_TagOperationReport_descriptor =
            getDescriptor().getMessageTypes().get(57);
          internal_static_Impinj_STP_TagOperationReport_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TagOperationReport_descriptor,
              new java.lang.String[] { "TagOperationReportType", "TagOperationResult", "TagOperationResultDetail", "TID", "EPC", "EPCAttempted", "UserMemoryInv", "EPCMemoryResult", "AccessPasswordResult", "KillPasswordResult", "LockConfigResult", "UserMemoryResult", "BlockpermalockResult", "KillTagResult", "PcWordResult", "TagSpecificFeatureConfigResult", "TidWriteResult", "Timestamp", "AntennaID", "Frequency", "RSSI", "JobId", });
          internal_static_Impinj_STP_CartonContentsTag_descriptor =
            getDescriptor().getMessageTypes().get(58);
          internal_static_Impinj_STP_CartonContentsTag_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_CartonContentsTag_descriptor,
              new java.lang.String[] { "Tid", "Epc", "Confidence", "Metric1", "Metric2", "Metric3", });
          internal_static_Impinj_STP_CartonContentsReport_descriptor =
            getDescriptor().getMessageTypes().get(59);
          internal_static_Impinj_STP_CartonContentsReport_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_CartonContentsReport_descriptor,
              new java.lang.String[] { "CartonContentsResult", "EnterTimestamp", "ExitTimestamp", "CartonSize", "CartonContentsTag", "CartonContentsError", "StartTimestamp", "StopTimestamp", });
          internal_static_Impinj_STP_CartonContentsError_descriptor =
            getDescriptor().getMessageTypes().get(60);
          internal_static_Impinj_STP_CartonContentsError_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_CartonContentsError_descriptor,
              new java.lang.String[] { "ErrorType", "ExtraTimestamp", "MinTimestamp", "MaxTimestamp", });
          internal_static_Impinj_STP_TagModeMetrics_descriptor =
            getDescriptor().getMessageTypes().get(61);
          internal_static_Impinj_STP_TagModeMetrics_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TagModeMetrics_descriptor,
              new java.lang.String[] { "TotalCount", "PassCount", "FailCount", "VoidCount", });
          internal_static_Impinj_STP_TagMetrics_descriptor =
            getDescriptor().getMessageTypes().get(62);
          internal_static_Impinj_STP_TagMetrics_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_TagMetrics_descriptor,
              new java.lang.String[] { "TagChip", "VerifyBasicMetrics", "VerifyDataMetrics", "EncodeMetrics", "InventoryMetrics", "CartonContentsMetrics", });
          internal_static_Impinj_STP_InterDeviceCommunicationMetrics_descriptor =
            getDescriptor().getMessageTypes().get(63);
          internal_static_Impinj_STP_InterDeviceCommunicationMetrics_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_InterDeviceCommunicationMetrics_descriptor,
              new java.lang.String[] { "SerialNumber", "ReceivedMessageCount", });
          internal_static_Impinj_STP_OperationMetrics_descriptor =
            getDescriptor().getMessageTypes().get(64);
          internal_static_Impinj_STP_OperationMetrics_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OperationMetrics_descriptor,
              new java.lang.String[] { "RemainingNonMonzaEncodes", "TagMetrics", "InterDeviceCommunicationMetrics", "RemainingMonzaEncodes", });
          internal_static_Impinj_STP_OperationDataDetails_descriptor =
            getDescriptor().getMessageTypes().get(65);
          internal_static_Impinj_STP_OperationDataDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OperationDataDetails_descriptor,
              new java.lang.String[] { "SerialNumber", "FirmwareVersion", "Region", "InstalledFeatures", "NonMonzaVolumeKeyId", "OperationMetrics", "MonzaVolumeKeyId", });
          internal_static_Impinj_STP_OperationData_descriptor =
            getDescriptor().getMessageTypes().get(66);
          internal_static_Impinj_STP_OperationData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OperationData_descriptor,
              new java.lang.String[] { "OperationDetails", "Data", });
          internal_static_Impinj_STP_LicenseKey_descriptor =
            getDescriptor().getMessageTypes().get(67);
          internal_static_Impinj_STP_LicenseKey_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_LicenseKey_descriptor,
              new java.lang.String[] { "LicenseKeyPayload", });
          internal_static_Impinj_STP_OperationEvent_descriptor =
            getDescriptor().getMessageTypes().get(68);
          internal_static_Impinj_STP_OperationEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_OperationEvent_descriptor,
              new java.lang.String[] { "Timestamp", "OperationEventType", "OperationTriggerType", });
          internal_static_Impinj_STP_DeviceExceptionEvent_descriptor =
            getDescriptor().getMessageTypes().get(69);
          internal_static_Impinj_STP_DeviceExceptionEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_DeviceExceptionEvent_descriptor,
              new java.lang.String[] { "Timestamp", "DeviceExceptionEventType", "ExceptionDetail", });
          internal_static_Impinj_STP_GPIEvent_descriptor =
            getDescriptor().getMessageTypes().get(70);
          internal_static_Impinj_STP_GPIEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GPIEvent_descriptor,
              new java.lang.String[] { "Timestamp", "GpiState", });
          internal_static_Impinj_STP_LowEncodeVolumeEvent_descriptor =
            getDescriptor().getMessageTypes().get(71);
          internal_static_Impinj_STP_LowEncodeVolumeEvent_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_LowEncodeVolumeEvent_descriptor,
              new java.lang.String[] { "LowEncodeVolumeEventType", "RemainingMonzaEncodes", "RemainingNonMonzaEncodes", });
          internal_static_Impinj_STP_DeviceEventReport_descriptor =
            getDescriptor().getMessageTypes().get(72);
          internal_static_Impinj_STP_DeviceEventReport_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_DeviceEventReport_descriptor,
              new java.lang.String[] { "OperationEvent", "GPIEvent", "DeviceExceptionEvent", "LowEncodeVolumeEvent", });
          internal_static_Impinj_STP_GetAntennaConfigCommand_descriptor =
            getDescriptor().getMessageTypes().get(73);
          internal_static_Impinj_STP_GetAntennaConfigCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetAntennaConfigCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_SetAntennaConfigCommand_descriptor =
            getDescriptor().getMessageTypes().get(74);
          internal_static_Impinj_STP_SetAntennaConfigCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetAntennaConfigCommand_descriptor,
              new java.lang.String[] { "AntennasConfig", });
          internal_static_Impinj_STP_StartCommand_descriptor =
            getDescriptor().getMessageTypes().get(75);
          internal_static_Impinj_STP_StartCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_StartCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_SetDeviceConfigCommand_descriptor =
            getDescriptor().getMessageTypes().get(76);
          internal_static_Impinj_STP_SetDeviceConfigCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetDeviceConfigCommand_descriptor,
              new java.lang.String[] { "DeviceConfig", });
          internal_static_Impinj_STP_GetDeviceConfigCommand_descriptor =
            getDescriptor().getMessageTypes().get(77);
          internal_static_Impinj_STP_GetDeviceConfigCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetDeviceConfigCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_EngageCommand_descriptor =
            getDescriptor().getMessageTypes().get(78);
          internal_static_Impinj_STP_EngageCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_EngageCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_DisengageCommand_descriptor =
            getDescriptor().getMessageTypes().get(79);
          internal_static_Impinj_STP_DisengageCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_DisengageCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_SetOperationResultGPOCommand_descriptor =
            getDescriptor().getMessageTypes().get(80);
          internal_static_Impinj_STP_SetOperationResultGPOCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetOperationResultGPOCommand_descriptor,
              new java.lang.String[] { "OperationSummaryResult", });
          internal_static_Impinj_STP_AddSerializationJobCommand_descriptor =
            getDescriptor().getMessageTypes().get(81);
          internal_static_Impinj_STP_AddSerializationJobCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddSerializationJobCommand_descriptor,
              new java.lang.String[] { "SerializationJob", });
          internal_static_Impinj_STP_RemoveSerializationJobCommand_descriptor =
            getDescriptor().getMessageTypes().get(82);
          internal_static_Impinj_STP_RemoveSerializationJobCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_RemoveSerializationJobCommand_descriptor,
              new java.lang.String[] { "JobId", });
          internal_static_Impinj_STP_SetInventoryJobCommand_descriptor =
            getDescriptor().getMessageTypes().get(83);
          internal_static_Impinj_STP_SetInventoryJobCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetInventoryJobCommand_descriptor,
              new java.lang.String[] { "InventoryJob", });
          internal_static_Impinj_STP_SetCartonContentsJobCommand_descriptor =
            getDescriptor().getMessageTypes().get(84);
          internal_static_Impinj_STP_SetCartonContentsJobCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetCartonContentsJobCommand_descriptor,
              new java.lang.String[] { "CartonContentsJob", });
          internal_static_Impinj_STP_GetOperationDataCommand_descriptor =
            getDescriptor().getMessageTypes().get(85);
          internal_static_Impinj_STP_GetOperationDataCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetOperationDataCommand_descriptor,
              new java.lang.String[] { "Reserved", });
          internal_static_Impinj_STP_AddLicenseKeyCommand_descriptor =
            getDescriptor().getMessageTypes().get(86);
          internal_static_Impinj_STP_AddLicenseKeyCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddLicenseKeyCommand_descriptor,
              new java.lang.String[] { "LicenseKey", });
          internal_static_Impinj_STP_AddTIDTableEntriesCommand_descriptor =
            getDescriptor().getMessageTypes().get(87);
          internal_static_Impinj_STP_AddTIDTableEntriesCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddTIDTableEntriesCommand_descriptor,
              new java.lang.String[] { "TableEntries", });
          internal_static_Impinj_STP_AddOrderedListEntriesCommand_descriptor =
            getDescriptor().getMessageTypes().get(88);
          internal_static_Impinj_STP_AddOrderedListEntriesCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddOrderedListEntriesCommand_descriptor,
              new java.lang.String[] { "OrderedListEntries", });
          internal_static_Impinj_STP_StartResp_descriptor =
            getDescriptor().getMessageTypes().get(89);
          internal_static_Impinj_STP_StartResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_StartResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_SetDeviceConfigResp_descriptor =
            getDescriptor().getMessageTypes().get(90);
          internal_static_Impinj_STP_SetDeviceConfigResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetDeviceConfigResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_GetDeviceConfigResp_descriptor =
            getDescriptor().getMessageTypes().get(91);
          internal_static_Impinj_STP_GetDeviceConfigResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetDeviceConfigResp_descriptor,
              new java.lang.String[] { "Reply", "DeviceConfig", });
          internal_static_Impinj_STP_SetAntennaConfigResp_descriptor =
            getDescriptor().getMessageTypes().get(92);
          internal_static_Impinj_STP_SetAntennaConfigResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetAntennaConfigResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_GetAntennaConfigResp_descriptor =
            getDescriptor().getMessageTypes().get(93);
          internal_static_Impinj_STP_GetAntennaConfigResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetAntennaConfigResp_descriptor,
              new java.lang.String[] { "Reply", "AntennasConfig", });
          internal_static_Impinj_STP_EngageResp_descriptor =
            getDescriptor().getMessageTypes().get(94);
          internal_static_Impinj_STP_EngageResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_EngageResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_DisengageResp_descriptor =
            getDescriptor().getMessageTypes().get(95);
          internal_static_Impinj_STP_DisengageResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_DisengageResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_SetOperationResultGPOResp_descriptor =
            getDescriptor().getMessageTypes().get(96);
          internal_static_Impinj_STP_SetOperationResultGPOResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetOperationResultGPOResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_AddSerializationJobResp_descriptor =
            getDescriptor().getMessageTypes().get(97);
          internal_static_Impinj_STP_AddSerializationJobResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddSerializationJobResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_RemoveSerializationJobResp_descriptor =
            getDescriptor().getMessageTypes().get(98);
          internal_static_Impinj_STP_RemoveSerializationJobResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_RemoveSerializationJobResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_SetInventoryJobResp_descriptor =
            getDescriptor().getMessageTypes().get(99);
          internal_static_Impinj_STP_SetInventoryJobResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetInventoryJobResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_SetCartonContentsJobResp_descriptor =
            getDescriptor().getMessageTypes().get(100);
          internal_static_Impinj_STP_SetCartonContentsJobResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_SetCartonContentsJobResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_GetOperationDataResp_descriptor =
            getDescriptor().getMessageTypes().get(101);
          internal_static_Impinj_STP_GetOperationDataResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_GetOperationDataResp_descriptor,
              new java.lang.String[] { "Reply", "OperationData", });
          internal_static_Impinj_STP_AddLicenseKeyResp_descriptor =
            getDescriptor().getMessageTypes().get(102);
          internal_static_Impinj_STP_AddLicenseKeyResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddLicenseKeyResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_AddTIDTableEntriesResp_descriptor =
            getDescriptor().getMessageTypes().get(103);
          internal_static_Impinj_STP_AddTIDTableEntriesResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddTIDTableEntriesResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_AddOrderedListEntriesResp_descriptor =
            getDescriptor().getMessageTypes().get(104);
          internal_static_Impinj_STP_AddOrderedListEntriesResp_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_AddOrderedListEntriesResp_descriptor,
              new java.lang.String[] { "Reply", });
          internal_static_Impinj_STP_Command_descriptor =
            getDescriptor().getMessageTypes().get(105);
          internal_static_Impinj_STP_Command_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Command_descriptor,
              new java.lang.String[] { "Connect", "GetVersionsReader", "Start", "Stop", "GetDeviceState", "SetDeviceConfig", "GetDeviceConfig", "SetAntennaConfig", "GetAntennaConfig", "Engage", "Disengage", "SetOperationResultGpo", "AddSerializationJob", "RemoveSerializationJob", "AddTidTableEntries", "AddOrderedListEntries", "SetInventoryJob", "SetCartonContentsJob", "GetOperationData", "AddLicenseKey", });
          internal_static_Impinj_STP_Response_descriptor =
            getDescriptor().getMessageTypes().get(106);
          internal_static_Impinj_STP_Response_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Response_descriptor,
              new java.lang.String[] { "Connect", "GetVersionsReader", "Start", "Stop", "Invalid", "GetDeviceState", "SetDeviceConfig", "GetDeviceConfig", "SetAntennaConfig", "GetAntennaConfig", "Engage", "Disengage", "SetOperationResultGpo", "AddSerializationJob", "RemoveSerializationJob", "AddTidTableEntries", "AddOrderedListEntries", "SetInventoryJob", "SetCartonContentsJob", "GetOperationData", "AddLicenseKey", });
          internal_static_Impinj_STP_Report_descriptor =
            getDescriptor().getMessageTypes().get(107);
          internal_static_Impinj_STP_Report_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Report_descriptor,
              new java.lang.String[] { "DeviceEventReport", "TagOperationReport", "OperationSummaryReport", "CartonContentsReport", });
          internal_static_Impinj_STP_Update_descriptor =
            getDescriptor().getMessageTypes().get(108);
          internal_static_Impinj_STP_Update_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Update_descriptor,
              new java.lang.String[] { "AddTidTableEntries", });
          internal_static_Impinj_STP_Packet_descriptor =
            getDescriptor().getMessageTypes().get(109);
          internal_static_Impinj_STP_Packet_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Impinj_STP_Packet_descriptor,
              new java.lang.String[] { "Command", "Response", "Report", "Update", });
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }

  // @@protoc_insertion_point(outer_class_scope)
}
