// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: dev_info.proto
package com.fs.watch.protobuf;
public final class DevInfo {
  private DevInfo() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code DevInfoFota}
   */
  public enum DevInfoFota
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>NON = 0;</code>
     */
    NON(0),
    /**
     * <code>CC2540 = 1;</code>
     */
    CC2540(1),
    /**
     * <code>NRF51 = 2;</code>
     */
    NRF51(2),
    /**
     * <code>DA1468X = 3;</code>
     */
    DA1468X(3),
    /**
     * <code>MT2523 = 4;</code>
     */
    MT2523(4),
    /**
     * <code>NRF52_BLE = 5;</code>
     */
    NRF52_BLE(5),
    /**
     * <code>GH551X_BLE = 6;</code>
     */
    GH551X_BLE(6),
    /**
     * <code>ATS3085_BLE = 7;</code>
     */
    ATS3085_BLE(7),
    ;

    /**
     * <code>NON = 0;</code>
     */
    public static final int NON_VALUE = 0;
    /**
     * <code>CC2540 = 1;</code>
     */
    public static final int CC2540_VALUE = 1;
    /**
     * <code>NRF51 = 2;</code>
     */
    public static final int NRF51_VALUE = 2;
    /**
     * <code>DA1468X = 3;</code>
     */
    public static final int DA1468X_VALUE = 3;
    /**
     * <code>MT2523 = 4;</code>
     */
    public static final int MT2523_VALUE = 4;
    /**
     * <code>NRF52_BLE = 5;</code>
     */
    public static final int NRF52_BLE_VALUE = 5;
    /**
     * <code>GH551X_BLE = 6;</code>
     */
    public static final int GH551X_BLE_VALUE = 6;
    /**
     * <code>ATS3085_BLE = 7;</code>
     */
    public static final int ATS3085_BLE_VALUE = 7;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static DevInfoFota valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static DevInfoFota forNumber(int value) {
      switch (value) {
        case 0: return NON;
        case 1: return CC2540;
        case 2: return NRF51;
        case 3: return DA1468X;
        case 4: return MT2523;
        case 5: return NRF52_BLE;
        case 6: return GH551X_BLE;
        case 7: return ATS3085_BLE;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return DevInfo.getDescriptor().getEnumTypes().get(0);
    }

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

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

    private final int value;

    private DevInfoFota(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:DevInfoFota)
  }

  /**
   * Protobuf enum {@code DevInfoOperation}
   */
  public enum DevInfoOperation
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>Read = 0;</code>
     */
    Read(0),
    /**
     * <code>Write = 1;</code>
     */
    Write(1),
    ;

    /**
     * <code>Read = 0;</code>
     */
    public static final int Read_VALUE = 0;
    /**
     * <code>Write = 1;</code>
     */
    public static final int Write_VALUE = 1;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static DevInfoOperation valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static DevInfoOperation forNumber(int value) {
      switch (value) {
        case 0: return Read;
        case 1: return Write;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return DevInfo.getDescriptor().getEnumTypes().get(1);
    }

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

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

    private final int value;

    private DevInfoOperation(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:DevInfoOperation)
  }

  public interface DevInfoManuOrBuilder extends
      // @@protoc_insertion_point(interface_extends:DevInfoManu)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required string date = 1;</code>
     * @return Whether the date field is set.
     */
    boolean hasDate();
    /**
     * <code>required string date = 1;</code>
     * @return The date.
     */
    String getDate();
    /**
     * <code>required string date = 1;</code>
     * @return The bytes for date.
     */
    com.google.protobuf.ByteString
        getDateBytes();

    /**
     * <code>required string factory = 2;</code>
     * @return Whether the factory field is set.
     */
    boolean hasFactory();
    /**
     * <code>required string factory = 2;</code>
     * @return The factory.
     */
    String getFactory();
    /**
     * <code>required string factory = 2;</code>
     * @return The bytes for factory.
     */
    com.google.protobuf.ByteString
        getFactoryBytes();
  }
  /**
   * Protobuf type {@code DevInfoManu}
   */
  public  static final class DevInfoManu extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:DevInfoManu)
      DevInfoManuOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DevInfoManu.newBuilder() to construct.
    private DevInfoManu(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DevInfoManu() {
      date_ = "";
      factory_ = "";
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new DevInfoManu();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DevInfoManu(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      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;
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              date_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              factory_ = bs;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return DevInfo.internal_static_DevInfoManu_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return DevInfo.internal_static_DevInfoManu_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              DevInfoManu.class, Builder.class);
    }

    private int bitField0_;
    public static final int DATE_FIELD_NUMBER = 1;
    private volatile Object date_;
    /**
     * <code>required string date = 1;</code>
     * @return Whether the date field is set.
     */
    public boolean hasDate() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required string date = 1;</code>
     * @return The date.
     */
    public String getDate() {
      Object ref = date_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          date_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string date = 1;</code>
     * @return The bytes for date.
     */
    public com.google.protobuf.ByteString
        getDateBytes() {
      Object ref = date_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        date_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FACTORY_FIELD_NUMBER = 2;
    private volatile Object factory_;
    /**
     * <code>required string factory = 2;</code>
     * @return Whether the factory field is set.
     */
    public boolean hasFactory() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required string factory = 2;</code>
     * @return The factory.
     */
    public String getFactory() {
      Object ref = factory_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          factory_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string factory = 2;</code>
     * @return The bytes for factory.
     */
    public com.google.protobuf.ByteString
        getFactoryBytes() {
      Object ref = factory_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        factory_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

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

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, date_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, factory_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, date_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, factory_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof DevInfoManu)) {
        return super.equals(obj);
      }
      DevInfoManu other = (DevInfoManu) obj;

      if (hasDate() != other.hasDate()) return false;
      if (hasDate()) {
        if (!getDate()
            .equals(other.getDate())) return false;
      }
      if (hasFactory() != other.hasFactory()) return false;
      if (hasFactory()) {
        if (!getFactory()
            .equals(other.getFactory())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasDate()) {
        hash = (37 * hash) + DATE_FIELD_NUMBER;
        hash = (53 * hash) + getDate().hashCode();
      }
      if (hasFactory()) {
        hash = (37 * hash) + FACTORY_FIELD_NUMBER;
        hash = (53 * hash) + getFactory().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static DevInfoManu parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DevInfoManu parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DevInfoManu parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DevInfoManu parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DevInfoManu parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DevInfoManu parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DevInfoManu parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DevInfoManu parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static DevInfoManu parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static DevInfoManu parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static DevInfoManu parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DevInfoManu parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(DevInfoManu prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DevInfoManu}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:DevInfoManu)
        DevInfoManuOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return DevInfo.internal_static_DevInfoManu_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return DevInfo.internal_static_DevInfoManu_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                DevInfoManu.class, Builder.class);
      }

      // Construct using DevInfo.DevInfoManu.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        date_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        factory_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return DevInfo.internal_static_DevInfoManu_descriptor;
      }

      @Override
      public DevInfoManu getDefaultInstanceForType() {
        return DevInfoManu.getDefaultInstance();
      }

      @Override
      public DevInfoManu build() {
        DevInfoManu result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public DevInfoManu buildPartial() {
        DevInfoManu result = new DevInfoManu(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.date_ = date_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.factory_ = factory_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof DevInfoManu) {
          return mergeFrom((DevInfoManu)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(DevInfoManu other) {
        if (other == DevInfoManu.getDefaultInstance()) return this;
        if (other.hasDate()) {
          bitField0_ |= 0x00000001;
          date_ = other.date_;
          onChanged();
        }
        if (other.hasFactory()) {
          bitField0_ |= 0x00000002;
          factory_ = other.factory_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasDate()) {
          return false;
        }
        if (!hasFactory()) {
          return false;
        }
        return true;
      }

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

      private Object date_ = "";
      /**
       * <code>required string date = 1;</code>
       * @return Whether the date field is set.
       */
      public boolean hasDate() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required string date = 1;</code>
       * @return The date.
       */
      public String getDate() {
        Object ref = date_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            date_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>required string date = 1;</code>
       * @return The bytes for date.
       */
      public com.google.protobuf.ByteString
          getDateBytes() {
        Object ref = date_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          date_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string date = 1;</code>
       * @param value The date to set.
       * @return This builder for chaining.
       */
      public Builder setDate(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        date_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string date = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearDate() {
        bitField0_ = (bitField0_ & ~0x00000001);
        date_ = getDefaultInstance().getDate();
        onChanged();
        return this;
      }
      /**
       * <code>required string date = 1;</code>
       * @param value The bytes for date to set.
       * @return This builder for chaining.
       */
      public Builder setDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        date_ = value;
        onChanged();
        return this;
      }

      private Object factory_ = "";
      /**
       * <code>required string factory = 2;</code>
       * @return Whether the factory field is set.
       */
      public boolean hasFactory() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required string factory = 2;</code>
       * @return The factory.
       */
      public String getFactory() {
        Object ref = factory_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            factory_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>required string factory = 2;</code>
       * @return The bytes for factory.
       */
      public com.google.protobuf.ByteString
          getFactoryBytes() {
        Object ref = factory_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          factory_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string factory = 2;</code>
       * @param value The factory to set.
       * @return This builder for chaining.
       */
      public Builder setFactory(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        factory_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string factory = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearFactory() {
        bitField0_ = (bitField0_ & ~0x00000002);
        factory_ = getDefaultInstance().getFactory();
        onChanged();
        return this;
      }
      /**
       * <code>required string factory = 2;</code>
       * @param value The bytes for factory to set.
       * @return This builder for chaining.
       */
      public Builder setFactoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        factory_ = value;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:DevInfoManu)
    }

    // @@protoc_insertion_point(class_scope:DevInfoManu)
    private static final DevInfoManu DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new DevInfoManu();
    }

    public static DevInfoManu getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

    public static com.google.protobuf.Parser<DevInfoManu> parser() {
      return PARSER;
    }

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

    @Override
    public DevInfoManu getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeviceInfoapnOrBuilder extends
      // @@protoc_insertion_point(interface_extends:DeviceInfoapn)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 mcc = 1;</code>
     * @return Whether the mcc field is set.
     */
    boolean hasMcc();
    /**
     * <code>required fixed32 mcc = 1;</code>
     * @return The mcc.
     */
    int getMcc();

    /**
     * <code>required fixed32 mnc = 2;</code>
     * @return Whether the mnc field is set.
     */
    boolean hasMnc();
    /**
     * <code>required fixed32 mnc = 2;</code>
     * @return The mnc.
     */
    int getMnc();

    /**
     * <code>required string setting_name = 3;</code>
     * @return Whether the settingName field is set.
     */
    boolean hasSettingName();
    /**
     * <code>required string setting_name = 3;</code>
     * @return The settingName.
     */
    String getSettingName();
    /**
     * <code>required string setting_name = 3;</code>
     * @return The bytes for settingName.
     */
    com.google.protobuf.ByteString
        getSettingNameBytes();

    /**
     * <code>required fixed32 auth_type = 4;</code>
     * @return Whether the authType field is set.
     */
    boolean hasAuthType();
    /**
     * <code>required fixed32 auth_type = 4;</code>
     * @return The authType.
     */
    int getAuthType();

    /**
     * <code>required fixed32 roaming_protocol = 5;</code>
     * @return Whether the roamingProtocol field is set.
     */
    boolean hasRoamingProtocol();
    /**
     * <code>required fixed32 roaming_protocol = 5;</code>
     * @return The roamingProtocol.
     */
    int getRoamingProtocol();

    /**
     * <code>required string apn_str = 6;</code>
     * @return Whether the apnStr field is set.
     */
    boolean hasApnStr();
    /**
     * <code>required string apn_str = 6;</code>
     * @return The apnStr.
     */
    String getApnStr();
    /**
     * <code>required string apn_str = 6;</code>
     * @return The bytes for apnStr.
     */
    com.google.protobuf.ByteString
        getApnStrBytes();

    /**
     * <code>required string user_name = 7;</code>
     * @return Whether the userName field is set.
     */
    boolean hasUserName();
    /**
     * <code>required string user_name = 7;</code>
     * @return The userName.
     */
    String getUserName();
    /**
     * <code>required string user_name = 7;</code>
     * @return The bytes for userName.
     */
    com.google.protobuf.ByteString
        getUserNameBytes();

    /**
     * <code>required string password = 8;</code>
     * @return Whether the password field is set.
     */
    boolean hasPassword();
    /**
     * <code>required string password = 8;</code>
     * @return The password.
     */
    String getPassword();
    /**
     * <code>required string password = 8;</code>
     * @return The bytes for password.
     */
    com.google.protobuf.ByteString
        getPasswordBytes();
  }
  /**
   * Protobuf type {@code DeviceInfoapn}
   */
  public  static final class DeviceInfoapn extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:DeviceInfoapn)
      DeviceInfoapnOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeviceInfoapn.newBuilder() to construct.
    private DeviceInfoapn(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeviceInfoapn() {
      settingName_ = "";
      apnStr_ = "";
      userName_ = "";
      password_ = "";
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new DeviceInfoapn();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceInfoapn(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      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;
            case 13: {
              bitField0_ |= 0x00000001;
              mcc_ = input.readFixed32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              mnc_ = input.readFixed32();
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              settingName_ = bs;
              break;
            }
            case 37: {
              bitField0_ |= 0x00000008;
              authType_ = input.readFixed32();
              break;
            }
            case 45: {
              bitField0_ |= 0x00000010;
              roamingProtocol_ = input.readFixed32();
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              apnStr_ = bs;
              break;
            }
            case 58: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              userName_ = bs;
              break;
            }
            case 66: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000080;
              password_ = bs;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return DevInfo.internal_static_DeviceInfoapn_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return DevInfo.internal_static_DeviceInfoapn_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              DeviceInfoapn.class, Builder.class);
    }

    private int bitField0_;
    public static final int MCC_FIELD_NUMBER = 1;
    private int mcc_;
    /**
     * <code>required fixed32 mcc = 1;</code>
     * @return Whether the mcc field is set.
     */
    public boolean hasMcc() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 mcc = 1;</code>
     * @return The mcc.
     */
    public int getMcc() {
      return mcc_;
    }

    public static final int MNC_FIELD_NUMBER = 2;
    private int mnc_;
    /**
     * <code>required fixed32 mnc = 2;</code>
     * @return Whether the mnc field is set.
     */
    public boolean hasMnc() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required fixed32 mnc = 2;</code>
     * @return The mnc.
     */
    public int getMnc() {
      return mnc_;
    }

    public static final int SETTING_NAME_FIELD_NUMBER = 3;
    private volatile Object settingName_;
    /**
     * <code>required string setting_name = 3;</code>
     * @return Whether the settingName field is set.
     */
    public boolean hasSettingName() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required string setting_name = 3;</code>
     * @return The settingName.
     */
    public String getSettingName() {
      Object ref = settingName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          settingName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string setting_name = 3;</code>
     * @return The bytes for settingName.
     */
    public com.google.protobuf.ByteString
        getSettingNameBytes() {
      Object ref = settingName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        settingName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int AUTH_TYPE_FIELD_NUMBER = 4;
    private int authType_;
    /**
     * <code>required fixed32 auth_type = 4;</code>
     * @return Whether the authType field is set.
     */
    public boolean hasAuthType() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>required fixed32 auth_type = 4;</code>
     * @return The authType.
     */
    public int getAuthType() {
      return authType_;
    }

    public static final int ROAMING_PROTOCOL_FIELD_NUMBER = 5;
    private int roamingProtocol_;
    /**
     * <code>required fixed32 roaming_protocol = 5;</code>
     * @return Whether the roamingProtocol field is set.
     */
    public boolean hasRoamingProtocol() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>required fixed32 roaming_protocol = 5;</code>
     * @return The roamingProtocol.
     */
    public int getRoamingProtocol() {
      return roamingProtocol_;
    }

    public static final int APN_STR_FIELD_NUMBER = 6;
    private volatile Object apnStr_;
    /**
     * <code>required string apn_str = 6;</code>
     * @return Whether the apnStr field is set.
     */
    public boolean hasApnStr() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>required string apn_str = 6;</code>
     * @return The apnStr.
     */
    public String getApnStr() {
      Object ref = apnStr_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          apnStr_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string apn_str = 6;</code>
     * @return The bytes for apnStr.
     */
    public com.google.protobuf.ByteString
        getApnStrBytes() {
      Object ref = apnStr_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        apnStr_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int USER_NAME_FIELD_NUMBER = 7;
    private volatile Object userName_;
    /**
     * <code>required string user_name = 7;</code>
     * @return Whether the userName field is set.
     */
    public boolean hasUserName() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>required string user_name = 7;</code>
     * @return The userName.
     */
    public String getUserName() {
      Object ref = userName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          userName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string user_name = 7;</code>
     * @return The bytes for userName.
     */
    public com.google.protobuf.ByteString
        getUserNameBytes() {
      Object ref = userName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        userName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PASSWORD_FIELD_NUMBER = 8;
    private volatile Object password_;
    /**
     * <code>required string password = 8;</code>
     * @return Whether the password field is set.
     */
    public boolean hasPassword() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>required string password = 8;</code>
     * @return The password.
     */
    public String getPassword() {
      Object ref = password_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          password_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string password = 8;</code>
     * @return The bytes for password.
     */
    public com.google.protobuf.ByteString
        getPasswordBytes() {
      Object ref = password_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        password_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasMcc()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMnc()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSettingName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAuthType()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasRoamingProtocol()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasApnStr()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasUserName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasPassword()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, mcc_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, mnc_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, settingName_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeFixed32(4, authType_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeFixed32(5, roamingProtocol_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, apnStr_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, userName_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, password_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, mcc_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, mnc_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, settingName_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(4, authType_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(5, roamingProtocol_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, apnStr_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, userName_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, password_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof DeviceInfoapn)) {
        return super.equals(obj);
      }
      DeviceInfoapn other = (DeviceInfoapn) obj;

      if (hasMcc() != other.hasMcc()) return false;
      if (hasMcc()) {
        if (getMcc()
            != other.getMcc()) return false;
      }
      if (hasMnc() != other.hasMnc()) return false;
      if (hasMnc()) {
        if (getMnc()
            != other.getMnc()) return false;
      }
      if (hasSettingName() != other.hasSettingName()) return false;
      if (hasSettingName()) {
        if (!getSettingName()
            .equals(other.getSettingName())) return false;
      }
      if (hasAuthType() != other.hasAuthType()) return false;
      if (hasAuthType()) {
        if (getAuthType()
            != other.getAuthType()) return false;
      }
      if (hasRoamingProtocol() != other.hasRoamingProtocol()) return false;
      if (hasRoamingProtocol()) {
        if (getRoamingProtocol()
            != other.getRoamingProtocol()) return false;
      }
      if (hasApnStr() != other.hasApnStr()) return false;
      if (hasApnStr()) {
        if (!getApnStr()
            .equals(other.getApnStr())) return false;
      }
      if (hasUserName() != other.hasUserName()) return false;
      if (hasUserName()) {
        if (!getUserName()
            .equals(other.getUserName())) return false;
      }
      if (hasPassword() != other.hasPassword()) return false;
      if (hasPassword()) {
        if (!getPassword()
            .equals(other.getPassword())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMcc()) {
        hash = (37 * hash) + MCC_FIELD_NUMBER;
        hash = (53 * hash) + getMcc();
      }
      if (hasMnc()) {
        hash = (37 * hash) + MNC_FIELD_NUMBER;
        hash = (53 * hash) + getMnc();
      }
      if (hasSettingName()) {
        hash = (37 * hash) + SETTING_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getSettingName().hashCode();
      }
      if (hasAuthType()) {
        hash = (37 * hash) + AUTH_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getAuthType();
      }
      if (hasRoamingProtocol()) {
        hash = (37 * hash) + ROAMING_PROTOCOL_FIELD_NUMBER;
        hash = (53 * hash) + getRoamingProtocol();
      }
      if (hasApnStr()) {
        hash = (37 * hash) + APN_STR_FIELD_NUMBER;
        hash = (53 * hash) + getApnStr().hashCode();
      }
      if (hasUserName()) {
        hash = (37 * hash) + USER_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getUserName().hashCode();
      }
      if (hasPassword()) {
        hash = (37 * hash) + PASSWORD_FIELD_NUMBER;
        hash = (53 * hash) + getPassword().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static DeviceInfoapn parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoapn parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoapn parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoapn parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoapn parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoapn parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoapn parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoapn parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoapn parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static DeviceInfoapn parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoapn parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoapn parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(DeviceInfoapn prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DeviceInfoapn}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:DeviceInfoapn)
        DeviceInfoapnOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return DevInfo.internal_static_DeviceInfoapn_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return DevInfo.internal_static_DeviceInfoapn_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                DeviceInfoapn.class, Builder.class);
      }

      // Construct using DevInfo.DeviceInfoapn.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        mcc_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        mnc_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        settingName_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        authType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        roamingProtocol_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        apnStr_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        userName_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        password_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return DevInfo.internal_static_DeviceInfoapn_descriptor;
      }

      @Override
      public DeviceInfoapn getDefaultInstanceForType() {
        return DeviceInfoapn.getDefaultInstance();
      }

      @Override
      public DeviceInfoapn build() {
        DeviceInfoapn result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public DeviceInfoapn buildPartial() {
        DeviceInfoapn result = new DeviceInfoapn(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.mcc_ = mcc_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.mnc_ = mnc_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.settingName_ = settingName_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.authType_ = authType_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.roamingProtocol_ = roamingProtocol_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.apnStr_ = apnStr_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.userName_ = userName_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          to_bitField0_ |= 0x00000080;
        }
        result.password_ = password_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof DeviceInfoapn) {
          return mergeFrom((DeviceInfoapn)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(DeviceInfoapn other) {
        if (other == DeviceInfoapn.getDefaultInstance()) return this;
        if (other.hasMcc()) {
          setMcc(other.getMcc());
        }
        if (other.hasMnc()) {
          setMnc(other.getMnc());
        }
        if (other.hasSettingName()) {
          bitField0_ |= 0x00000004;
          settingName_ = other.settingName_;
          onChanged();
        }
        if (other.hasAuthType()) {
          setAuthType(other.getAuthType());
        }
        if (other.hasRoamingProtocol()) {
          setRoamingProtocol(other.getRoamingProtocol());
        }
        if (other.hasApnStr()) {
          bitField0_ |= 0x00000020;
          apnStr_ = other.apnStr_;
          onChanged();
        }
        if (other.hasUserName()) {
          bitField0_ |= 0x00000040;
          userName_ = other.userName_;
          onChanged();
        }
        if (other.hasPassword()) {
          bitField0_ |= 0x00000080;
          password_ = other.password_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasMcc()) {
          return false;
        }
        if (!hasMnc()) {
          return false;
        }
        if (!hasSettingName()) {
          return false;
        }
        if (!hasAuthType()) {
          return false;
        }
        if (!hasRoamingProtocol()) {
          return false;
        }
        if (!hasApnStr()) {
          return false;
        }
        if (!hasUserName()) {
          return false;
        }
        if (!hasPassword()) {
          return false;
        }
        return true;
      }

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

      private int mcc_ ;
      /**
       * <code>required fixed32 mcc = 1;</code>
       * @return Whether the mcc field is set.
       */
      public boolean hasMcc() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 mcc = 1;</code>
       * @return The mcc.
       */
      public int getMcc() {
        return mcc_;
      }
      /**
       * <code>required fixed32 mcc = 1;</code>
       * @param value The mcc to set.
       * @return This builder for chaining.
       */
      public Builder setMcc(int value) {
        bitField0_ |= 0x00000001;
        mcc_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 mcc = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMcc() {
        bitField0_ = (bitField0_ & ~0x00000001);
        mcc_ = 0;
        onChanged();
        return this;
      }

      private int mnc_ ;
      /**
       * <code>required fixed32 mnc = 2;</code>
       * @return Whether the mnc field is set.
       */
      public boolean hasMnc() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required fixed32 mnc = 2;</code>
       * @return The mnc.
       */
      public int getMnc() {
        return mnc_;
      }
      /**
       * <code>required fixed32 mnc = 2;</code>
       * @param value The mnc to set.
       * @return This builder for chaining.
       */
      public Builder setMnc(int value) {
        bitField0_ |= 0x00000002;
        mnc_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 mnc = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearMnc() {
        bitField0_ = (bitField0_ & ~0x00000002);
        mnc_ = 0;
        onChanged();
        return this;
      }

      private Object settingName_ = "";
      /**
       * <code>required string setting_name = 3;</code>
       * @return Whether the settingName field is set.
       */
      public boolean hasSettingName() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required string setting_name = 3;</code>
       * @return The settingName.
       */
      public String getSettingName() {
        Object ref = settingName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            settingName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>required string setting_name = 3;</code>
       * @return The bytes for settingName.
       */
      public com.google.protobuf.ByteString
          getSettingNameBytes() {
        Object ref = settingName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          settingName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string setting_name = 3;</code>
       * @param value The settingName to set.
       * @return This builder for chaining.
       */
      public Builder setSettingName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        settingName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string setting_name = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSettingName() {
        bitField0_ = (bitField0_ & ~0x00000004);
        settingName_ = getDefaultInstance().getSettingName();
        onChanged();
        return this;
      }
      /**
       * <code>required string setting_name = 3;</code>
       * @param value The bytes for settingName to set.
       * @return This builder for chaining.
       */
      public Builder setSettingNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        settingName_ = value;
        onChanged();
        return this;
      }

      private int authType_ ;
      /**
       * <code>required fixed32 auth_type = 4;</code>
       * @return Whether the authType field is set.
       */
      public boolean hasAuthType() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>required fixed32 auth_type = 4;</code>
       * @return The authType.
       */
      public int getAuthType() {
        return authType_;
      }
      /**
       * <code>required fixed32 auth_type = 4;</code>
       * @param value The authType to set.
       * @return This builder for chaining.
       */
      public Builder setAuthType(int value) {
        bitField0_ |= 0x00000008;
        authType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 auth_type = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearAuthType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        authType_ = 0;
        onChanged();
        return this;
      }

      private int roamingProtocol_ ;
      /**
       * <code>required fixed32 roaming_protocol = 5;</code>
       * @return Whether the roamingProtocol field is set.
       */
      public boolean hasRoamingProtocol() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>required fixed32 roaming_protocol = 5;</code>
       * @return The roamingProtocol.
       */
      public int getRoamingProtocol() {
        return roamingProtocol_;
      }
      /**
       * <code>required fixed32 roaming_protocol = 5;</code>
       * @param value The roamingProtocol to set.
       * @return This builder for chaining.
       */
      public Builder setRoamingProtocol(int value) {
        bitField0_ |= 0x00000010;
        roamingProtocol_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 roaming_protocol = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearRoamingProtocol() {
        bitField0_ = (bitField0_ & ~0x00000010);
        roamingProtocol_ = 0;
        onChanged();
        return this;
      }

      private Object apnStr_ = "";
      /**
       * <code>required string apn_str = 6;</code>
       * @return Whether the apnStr field is set.
       */
      public boolean hasApnStr() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>required string apn_str = 6;</code>
       * @return The apnStr.
       */
      public String getApnStr() {
        Object ref = apnStr_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            apnStr_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>required string apn_str = 6;</code>
       * @return The bytes for apnStr.
       */
      public com.google.protobuf.ByteString
          getApnStrBytes() {
        Object ref = apnStr_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          apnStr_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string apn_str = 6;</code>
       * @param value The apnStr to set.
       * @return This builder for chaining.
       */
      public Builder setApnStr(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        apnStr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string apn_str = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearApnStr() {
        bitField0_ = (bitField0_ & ~0x00000020);
        apnStr_ = getDefaultInstance().getApnStr();
        onChanged();
        return this;
      }
      /**
       * <code>required string apn_str = 6;</code>
       * @param value The bytes for apnStr to set.
       * @return This builder for chaining.
       */
      public Builder setApnStrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        apnStr_ = value;
        onChanged();
        return this;
      }

      private Object userName_ = "";
      /**
       * <code>required string user_name = 7;</code>
       * @return Whether the userName field is set.
       */
      public boolean hasUserName() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>required string user_name = 7;</code>
       * @return The userName.
       */
      public String getUserName() {
        Object ref = userName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            userName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>required string user_name = 7;</code>
       * @return The bytes for userName.
       */
      public com.google.protobuf.ByteString
          getUserNameBytes() {
        Object ref = userName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          userName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string user_name = 7;</code>
       * @param value The userName to set.
       * @return This builder for chaining.
       */
      public Builder setUserName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        userName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string user_name = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearUserName() {
        bitField0_ = (bitField0_ & ~0x00000040);
        userName_ = getDefaultInstance().getUserName();
        onChanged();
        return this;
      }
      /**
       * <code>required string user_name = 7;</code>
       * @param value The bytes for userName to set.
       * @return This builder for chaining.
       */
      public Builder setUserNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        userName_ = value;
        onChanged();
        return this;
      }

      private Object password_ = "";
      /**
       * <code>required string password = 8;</code>
       * @return Whether the password field is set.
       */
      public boolean hasPassword() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>required string password = 8;</code>
       * @return The password.
       */
      public String getPassword() {
        Object ref = password_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            password_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>required string password = 8;</code>
       * @return The bytes for password.
       */
      public com.google.protobuf.ByteString
          getPasswordBytes() {
        Object ref = password_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          password_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string password = 8;</code>
       * @param value The password to set.
       * @return This builder for chaining.
       */
      public Builder setPassword(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        password_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string password = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearPassword() {
        bitField0_ = (bitField0_ & ~0x00000080);
        password_ = getDefaultInstance().getPassword();
        onChanged();
        return this;
      }
      /**
       * <code>required string password = 8;</code>
       * @param value The bytes for password to set.
       * @return This builder for chaining.
       */
      public Builder setPasswordBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        password_ = value;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:DeviceInfoapn)
    }

    // @@protoc_insertion_point(class_scope:DeviceInfoapn)
    private static final DeviceInfoapn DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new DeviceInfoapn();
    }

    public static DeviceInfoapn getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

    public static com.google.protobuf.Parser<DeviceInfoapn> parser() {
      return PARSER;
    }

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

    @Override
    public DeviceInfoapn getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeviceInfoResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:DeviceInfoResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string model = 1;</code>
     * @return Whether the model field is set.
     */
    boolean hasModel();
    /**
     * <code>optional string model = 1;</code>
     * @return The model.
     */
    String getModel();
    /**
     * <code>optional string model = 1;</code>
     * @return The bytes for model.
     */
    com.google.protobuf.ByteString
        getModelBytes();

    /**
     * <code>optional string version = 2;</code>
     * @return Whether the version field is set.
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 2;</code>
     * @return The version.
     */
    String getVersion();
    /**
     * <code>optional string version = 2;</code>
     * @return The bytes for version.
     */
    com.google.protobuf.ByteString
        getVersionBytes();

    /**
     * <code>optional bytes mac = 3;</code>
     * @return Whether the mac field is set.
     */
    boolean hasMac();
    /**
     * <code>optional bytes mac = 3;</code>
     * @return The mac.
     */
    com.google.protobuf.ByteString getMac();

    /**
     * <code>optional .DevInfoFota fota = 4;</code>
     * @return Whether the fota field is set.
     */
    boolean hasFota();
    /**
     * <code>optional .DevInfoFota fota = 4;</code>
     * @return The fota.
     */
    DevInfoFota getFota();

    /**
     * <code>optional .DevInfoManu manu = 5;</code>
     * @return Whether the manu field is set.
     */
    boolean hasManu();
    /**
     * <code>optional .DevInfoManu manu = 5;</code>
     * @return The manu.
     */
    DevInfoManu getManu();
    /**
     * <code>optional .DevInfoManu manu = 5;</code>
     */
    DevInfoManuOrBuilder getManuOrBuilder();

    /**
     * <code>optional bytes user_data = 6;</code>
     * @return Whether the userData field is set.
     */
    boolean hasUserData();
    /**
     * <code>optional bytes user_data = 6;</code>
     * @return The userData.
     */
    com.google.protobuf.ByteString getUserData();

    /**
     * <code>optional string pb_version = 7;</code>
     * @return Whether the pbVersion field is set.
     */
    boolean hasPbVersion();
    /**
     * <code>optional string pb_version = 7;</code>
     * @return The pbVersion.
     */
    String getPbVersion();
    /**
     * <code>optional string pb_version = 7;</code>
     * @return The bytes for pbVersion.
     */
    com.google.protobuf.ByteString
        getPbVersionBytes();

    /**
     * <code>optional fixed32 ctp_cs = 8;</code>
     * @return Whether the ctpCs field is set.
     */
    boolean hasCtpCs();
    /**
     * <code>optional fixed32 ctp_cs = 8;</code>
     * @return The ctpCs.
     */
    int getCtpCs();

    /**
     * <code>optional fixed32 program_addr = 9;</code>
     * @return Whether the programAddr field is set.
     */
    boolean hasProgramAddr();
    /**
     * <code>optional fixed32 program_addr = 9;</code>
     * @return The programAddr.
     */
    int getProgramAddr();

    /**
     * <code>optional fixed32 resource_addr = 10;</code>
     * @return Whether the resourceAddr field is set.
     */
    boolean hasResourceAddr();
    /**
     * <code>optional fixed32 resource_addr = 10;</code>
     * @return The resourceAddr.
     */
    int getResourceAddr();

    /**
     * <code>optional bool apn_context = 11;</code>
     * @return Whether the apnContext field is set.
     */
    boolean hasApnContext();
    /**
     * <code>optional bool apn_context = 11;</code>
     * @return The apnContext.
     */
    boolean getApnContext();

    /**
     * <code>optional string ble_name = 12;</code>
     * @return Whether the bleName field is set.
     */
    boolean hasBleName();
    /**
     * <code>optional string ble_name = 12;</code>
     * @return The bleName.
     */
    String getBleName();
    /**
     * <code>optional string ble_name = 12;</code>
     * @return The bytes for bleName.
     */
    com.google.protobuf.ByteString
        getBleNameBytes();

    /**
     * <code>optional fixed32 encryption_status = 13;</code>
     * @return Whether the encryptionStatus field is set.
     */
    boolean hasEncryptionStatus();
    /**
     * <code>optional fixed32 encryption_status = 13;</code>
     * @return The encryptionStatus.
     */
    int getEncryptionStatus();

    /**
     * <code>optional string bp_version = 14;</code>
     * @return Whether the bpVersion field is set.
     */
    boolean hasBpVersion();
    /**
     * <code>optional string bp_version = 14;</code>
     * @return The bpVersion.
     */
    String getBpVersion();
    /**
     * <code>optional string bp_version = 14;</code>
     * @return The bytes for bpVersion.
     */
    com.google.protobuf.ByteString
        getBpVersionBytes();
  }
  /**
   * Protobuf type {@code DeviceInfoResponse}
   */
  public  static final class DeviceInfoResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:DeviceInfoResponse)
      DeviceInfoResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeviceInfoResponse.newBuilder() to construct.
    private DeviceInfoResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeviceInfoResponse() {
      model_ = "";
      version_ = "";
      mac_ = com.google.protobuf.ByteString.EMPTY;
      fota_ = 0;
      userData_ = com.google.protobuf.ByteString.EMPTY;
      pbVersion_ = "";
      bleName_ = "";
      bpVersion_ = "";
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new DeviceInfoResponse();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceInfoResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      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;
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              model_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              version_ = bs;
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              mac_ = input.readBytes();
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              DevInfoFota value = DevInfoFota.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                fota_ = rawValue;
              }
              break;
            }
            case 42: {
              DevInfoManu.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) != 0)) {
                subBuilder = manu_.toBuilder();
              }
              manu_ = input.readMessage(DevInfoManu.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(manu_);
                manu_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              userData_ = input.readBytes();
              break;
            }
            case 58: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              pbVersion_ = bs;
              break;
            }
            case 69: {
              bitField0_ |= 0x00000080;
              ctpCs_ = input.readFixed32();
              break;
            }
            case 77: {
              bitField0_ |= 0x00000100;
              programAddr_ = input.readFixed32();
              break;
            }
            case 85: {
              bitField0_ |= 0x00000200;
              resourceAddr_ = input.readFixed32();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000400;
              apnContext_ = input.readBool();
              break;
            }
            case 98: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000800;
              bleName_ = bs;
              break;
            }
            case 109: {
              bitField0_ |= 0x00001000;
              encryptionStatus_ = input.readFixed32();
              break;
            }
            case 114: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00002000;
              bpVersion_ = bs;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return DevInfo.internal_static_DeviceInfoResponse_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return DevInfo.internal_static_DeviceInfoResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              DeviceInfoResponse.class, Builder.class);
    }

    private int bitField0_;
    public static final int MODEL_FIELD_NUMBER = 1;
    private volatile Object model_;
    /**
     * <code>optional string model = 1;</code>
     * @return Whether the model field is set.
     */
    public boolean hasModel() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional string model = 1;</code>
     * @return The model.
     */
    public String getModel() {
      Object ref = model_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          model_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string model = 1;</code>
     * @return The bytes for model.
     */
    public com.google.protobuf.ByteString
        getModelBytes() {
      Object ref = model_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        model_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERSION_FIELD_NUMBER = 2;
    private volatile Object version_;
    /**
     * <code>optional string version = 2;</code>
     * @return Whether the version field is set.
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional string version = 2;</code>
     * @return The version.
     */
    public String getVersion() {
      Object ref = version_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 2;</code>
     * @return The bytes for version.
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      Object ref = version_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MAC_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString mac_;
    /**
     * <code>optional bytes mac = 3;</code>
     * @return Whether the mac field is set.
     */
    public boolean hasMac() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional bytes mac = 3;</code>
     * @return The mac.
     */
    public com.google.protobuf.ByteString getMac() {
      return mac_;
    }

    public static final int FOTA_FIELD_NUMBER = 4;
    private int fota_;
    /**
     * <code>optional .DevInfoFota fota = 4;</code>
     * @return Whether the fota field is set.
     */
    public boolean hasFota() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .DevInfoFota fota = 4;</code>
     * @return The fota.
     */
    public DevInfoFota getFota() {
      @SuppressWarnings("deprecation")
      DevInfoFota result = DevInfoFota.valueOf(fota_);
      return result == null ? DevInfoFota.NON : result;
    }

    public static final int MANU_FIELD_NUMBER = 5;
    private DevInfoManu manu_;
    /**
     * <code>optional .DevInfoManu manu = 5;</code>
     * @return Whether the manu field is set.
     */
    public boolean hasManu() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .DevInfoManu manu = 5;</code>
     * @return The manu.
     */
    public DevInfoManu getManu() {
      return manu_ == null ? DevInfoManu.getDefaultInstance() : manu_;
    }
    /**
     * <code>optional .DevInfoManu manu = 5;</code>
     */
    public DevInfoManuOrBuilder getManuOrBuilder() {
      return manu_ == null ? DevInfoManu.getDefaultInstance() : manu_;
    }

    public static final int USER_DATA_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString userData_;
    /**
     * <code>optional bytes user_data = 6;</code>
     * @return Whether the userData field is set.
     */
    public boolean hasUserData() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional bytes user_data = 6;</code>
     * @return The userData.
     */
    public com.google.protobuf.ByteString getUserData() {
      return userData_;
    }

    public static final int PB_VERSION_FIELD_NUMBER = 7;
    private volatile Object pbVersion_;
    /**
     * <code>optional string pb_version = 7;</code>
     * @return Whether the pbVersion field is set.
     */
    public boolean hasPbVersion() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional string pb_version = 7;</code>
     * @return The pbVersion.
     */
    public String getPbVersion() {
      Object ref = pbVersion_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          pbVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string pb_version = 7;</code>
     * @return The bytes for pbVersion.
     */
    public com.google.protobuf.ByteString
        getPbVersionBytes() {
      Object ref = pbVersion_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        pbVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CTP_CS_FIELD_NUMBER = 8;
    private int ctpCs_;
    /**
     * <code>optional fixed32 ctp_cs = 8;</code>
     * @return Whether the ctpCs field is set.
     */
    public boolean hasCtpCs() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional fixed32 ctp_cs = 8;</code>
     * @return The ctpCs.
     */
    public int getCtpCs() {
      return ctpCs_;
    }

    public static final int PROGRAM_ADDR_FIELD_NUMBER = 9;
    private int programAddr_;
    /**
     * <code>optional fixed32 program_addr = 9;</code>
     * @return Whether the programAddr field is set.
     */
    public boolean hasProgramAddr() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional fixed32 program_addr = 9;</code>
     * @return The programAddr.
     */
    public int getProgramAddr() {
      return programAddr_;
    }

    public static final int RESOURCE_ADDR_FIELD_NUMBER = 10;
    private int resourceAddr_;
    /**
     * <code>optional fixed32 resource_addr = 10;</code>
     * @return Whether the resourceAddr field is set.
     */
    public boolean hasResourceAddr() {
      return ((bitField0_ & 0x00000200) != 0);
    }
    /**
     * <code>optional fixed32 resource_addr = 10;</code>
     * @return The resourceAddr.
     */
    public int getResourceAddr() {
      return resourceAddr_;
    }

    public static final int APN_CONTEXT_FIELD_NUMBER = 11;
    private boolean apnContext_;
    /**
     * <code>optional bool apn_context = 11;</code>
     * @return Whether the apnContext field is set.
     */
    public boolean hasApnContext() {
      return ((bitField0_ & 0x00000400) != 0);
    }
    /**
     * <code>optional bool apn_context = 11;</code>
     * @return The apnContext.
     */
    public boolean getApnContext() {
      return apnContext_;
    }

    public static final int BLE_NAME_FIELD_NUMBER = 12;
    private volatile Object bleName_;
    /**
     * <code>optional string ble_name = 12;</code>
     * @return Whether the bleName field is set.
     */
    public boolean hasBleName() {
      return ((bitField0_ & 0x00000800) != 0);
    }
    /**
     * <code>optional string ble_name = 12;</code>
     * @return The bleName.
     */
    public String getBleName() {
      Object ref = bleName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          bleName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string ble_name = 12;</code>
     * @return The bytes for bleName.
     */
    public com.google.protobuf.ByteString
        getBleNameBytes() {
      Object ref = bleName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        bleName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ENCRYPTION_STATUS_FIELD_NUMBER = 13;
    private int encryptionStatus_;
    /**
     * <code>optional fixed32 encryption_status = 13;</code>
     * @return Whether the encryptionStatus field is set.
     */
    public boolean hasEncryptionStatus() {
      return ((bitField0_ & 0x00001000) != 0);
    }
    /**
     * <code>optional fixed32 encryption_status = 13;</code>
     * @return The encryptionStatus.
     */
    public int getEncryptionStatus() {
      return encryptionStatus_;
    }

    public static final int BP_VERSION_FIELD_NUMBER = 14;
    private volatile Object bpVersion_;
    /**
     * <code>optional string bp_version = 14;</code>
     * @return Whether the bpVersion field is set.
     */
    public boolean hasBpVersion() {
      return ((bitField0_ & 0x00002000) != 0);
    }
    /**
     * <code>optional string bp_version = 14;</code>
     * @return The bpVersion.
     */
    public String getBpVersion() {
      Object ref = bpVersion_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          bpVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string bp_version = 14;</code>
     * @return The bytes for bpVersion.
     */
    public com.google.protobuf.ByteString
        getBpVersionBytes() {
      Object ref = bpVersion_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        bpVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

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

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, model_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, version_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeBytes(3, mac_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeEnum(4, fota_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeMessage(5, getManu());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeBytes(6, userData_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, pbVersion_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeFixed32(8, ctpCs_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        output.writeFixed32(9, programAddr_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        output.writeFixed32(10, resourceAddr_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        output.writeBool(11, apnContext_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 12, bleName_);
      }
      if (((bitField0_ & 0x00001000) != 0)) {
        output.writeFixed32(13, encryptionStatus_);
      }
      if (((bitField0_ & 0x00002000) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 14, bpVersion_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, model_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, version_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, mac_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, fota_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getManu());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, userData_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, pbVersion_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(8, ctpCs_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(9, programAddr_);
      }
      if (((bitField0_ & 0x00000200) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(10, resourceAddr_);
      }
      if (((bitField0_ & 0x00000400) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(11, apnContext_);
      }
      if (((bitField0_ & 0x00000800) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, bleName_);
      }
      if (((bitField0_ & 0x00001000) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(13, encryptionStatus_);
      }
      if (((bitField0_ & 0x00002000) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, bpVersion_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof DeviceInfoResponse)) {
        return super.equals(obj);
      }
      DeviceInfoResponse other = (DeviceInfoResponse) obj;

      if (hasModel() != other.hasModel()) return false;
      if (hasModel()) {
        if (!getModel()
            .equals(other.getModel())) return false;
      }
      if (hasVersion() != other.hasVersion()) return false;
      if (hasVersion()) {
        if (!getVersion()
            .equals(other.getVersion())) return false;
      }
      if (hasMac() != other.hasMac()) return false;
      if (hasMac()) {
        if (!getMac()
            .equals(other.getMac())) return false;
      }
      if (hasFota() != other.hasFota()) return false;
      if (hasFota()) {
        if (fota_ != other.fota_) return false;
      }
      if (hasManu() != other.hasManu()) return false;
      if (hasManu()) {
        if (!getManu()
            .equals(other.getManu())) return false;
      }
      if (hasUserData() != other.hasUserData()) return false;
      if (hasUserData()) {
        if (!getUserData()
            .equals(other.getUserData())) return false;
      }
      if (hasPbVersion() != other.hasPbVersion()) return false;
      if (hasPbVersion()) {
        if (!getPbVersion()
            .equals(other.getPbVersion())) return false;
      }
      if (hasCtpCs() != other.hasCtpCs()) return false;
      if (hasCtpCs()) {
        if (getCtpCs()
            != other.getCtpCs()) return false;
      }
      if (hasProgramAddr() != other.hasProgramAddr()) return false;
      if (hasProgramAddr()) {
        if (getProgramAddr()
            != other.getProgramAddr()) return false;
      }
      if (hasResourceAddr() != other.hasResourceAddr()) return false;
      if (hasResourceAddr()) {
        if (getResourceAddr()
            != other.getResourceAddr()) return false;
      }
      if (hasApnContext() != other.hasApnContext()) return false;
      if (hasApnContext()) {
        if (getApnContext()
            != other.getApnContext()) return false;
      }
      if (hasBleName() != other.hasBleName()) return false;
      if (hasBleName()) {
        if (!getBleName()
            .equals(other.getBleName())) return false;
      }
      if (hasEncryptionStatus() != other.hasEncryptionStatus()) return false;
      if (hasEncryptionStatus()) {
        if (getEncryptionStatus()
            != other.getEncryptionStatus()) return false;
      }
      if (hasBpVersion() != other.hasBpVersion()) return false;
      if (hasBpVersion()) {
        if (!getBpVersion()
            .equals(other.getBpVersion())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasModel()) {
        hash = (37 * hash) + MODEL_FIELD_NUMBER;
        hash = (53 * hash) + getModel().hashCode();
      }
      if (hasVersion()) {
        hash = (37 * hash) + VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getVersion().hashCode();
      }
      if (hasMac()) {
        hash = (37 * hash) + MAC_FIELD_NUMBER;
        hash = (53 * hash) + getMac().hashCode();
      }
      if (hasFota()) {
        hash = (37 * hash) + FOTA_FIELD_NUMBER;
        hash = (53 * hash) + fota_;
      }
      if (hasManu()) {
        hash = (37 * hash) + MANU_FIELD_NUMBER;
        hash = (53 * hash) + getManu().hashCode();
      }
      if (hasUserData()) {
        hash = (37 * hash) + USER_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getUserData().hashCode();
      }
      if (hasPbVersion()) {
        hash = (37 * hash) + PB_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getPbVersion().hashCode();
      }
      if (hasCtpCs()) {
        hash = (37 * hash) + CTP_CS_FIELD_NUMBER;
        hash = (53 * hash) + getCtpCs();
      }
      if (hasProgramAddr()) {
        hash = (37 * hash) + PROGRAM_ADDR_FIELD_NUMBER;
        hash = (53 * hash) + getProgramAddr();
      }
      if (hasResourceAddr()) {
        hash = (37 * hash) + RESOURCE_ADDR_FIELD_NUMBER;
        hash = (53 * hash) + getResourceAddr();
      }
      if (hasApnContext()) {
        hash = (37 * hash) + APN_CONTEXT_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getApnContext());
      }
      if (hasBleName()) {
        hash = (37 * hash) + BLE_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getBleName().hashCode();
      }
      if (hasEncryptionStatus()) {
        hash = (37 * hash) + ENCRYPTION_STATUS_FIELD_NUMBER;
        hash = (53 * hash) + getEncryptionStatus();
      }
      if (hasBpVersion()) {
        hash = (37 * hash) + BP_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getBpVersion().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static DeviceInfoResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static DeviceInfoResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(DeviceInfoResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DeviceInfoResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:DeviceInfoResponse)
        DeviceInfoResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return DevInfo.internal_static_DeviceInfoResponse_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return DevInfo.internal_static_DeviceInfoResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                DeviceInfoResponse.class, Builder.class);
      }

      // Construct using DevInfo.DeviceInfoResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getManuFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        model_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        mac_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        fota_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (manuBuilder_ == null) {
          manu_ = null;
        } else {
          manuBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        userData_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        pbVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        ctpCs_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        programAddr_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        resourceAddr_ = 0;
        bitField0_ = (bitField0_ & ~0x00000200);
        apnContext_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        bleName_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        encryptionStatus_ = 0;
        bitField0_ = (bitField0_ & ~0x00001000);
        bpVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return DevInfo.internal_static_DeviceInfoResponse_descriptor;
      }

      @Override
      public DeviceInfoResponse getDefaultInstanceForType() {
        return DeviceInfoResponse.getDefaultInstance();
      }

      @Override
      public DeviceInfoResponse build() {
        DeviceInfoResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public DeviceInfoResponse buildPartial() {
        DeviceInfoResponse result = new DeviceInfoResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.model_ = model_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.mac_ = mac_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.fota_ = fota_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (manuBuilder_ == null) {
            result.manu_ = manu_;
          } else {
            result.manu_ = manuBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.userData_ = userData_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.pbVersion_ = pbVersion_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.ctpCs_ = ctpCs_;
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.programAddr_ = programAddr_;
          to_bitField0_ |= 0x00000100;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.resourceAddr_ = resourceAddr_;
          to_bitField0_ |= 0x00000200;
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.apnContext_ = apnContext_;
          to_bitField0_ |= 0x00000400;
        }
        if (((from_bitField0_ & 0x00000800) != 0)) {
          to_bitField0_ |= 0x00000800;
        }
        result.bleName_ = bleName_;
        if (((from_bitField0_ & 0x00001000) != 0)) {
          result.encryptionStatus_ = encryptionStatus_;
          to_bitField0_ |= 0x00001000;
        }
        if (((from_bitField0_ & 0x00002000) != 0)) {
          to_bitField0_ |= 0x00002000;
        }
        result.bpVersion_ = bpVersion_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof DeviceInfoResponse) {
          return mergeFrom((DeviceInfoResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(DeviceInfoResponse other) {
        if (other == DeviceInfoResponse.getDefaultInstance()) return this;
        if (other.hasModel()) {
          bitField0_ |= 0x00000001;
          model_ = other.model_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000002;
          version_ = other.version_;
          onChanged();
        }
        if (other.hasMac()) {
          setMac(other.getMac());
        }
        if (other.hasFota()) {
          setFota(other.getFota());
        }
        if (other.hasManu()) {
          mergeManu(other.getManu());
        }
        if (other.hasUserData()) {
          setUserData(other.getUserData());
        }
        if (other.hasPbVersion()) {
          bitField0_ |= 0x00000040;
          pbVersion_ = other.pbVersion_;
          onChanged();
        }
        if (other.hasCtpCs()) {
          setCtpCs(other.getCtpCs());
        }
        if (other.hasProgramAddr()) {
          setProgramAddr(other.getProgramAddr());
        }
        if (other.hasResourceAddr()) {
          setResourceAddr(other.getResourceAddr());
        }
        if (other.hasApnContext()) {
          setApnContext(other.getApnContext());
        }
        if (other.hasBleName()) {
          bitField0_ |= 0x00000800;
          bleName_ = other.bleName_;
          onChanged();
        }
        if (other.hasEncryptionStatus()) {
          setEncryptionStatus(other.getEncryptionStatus());
        }
        if (other.hasBpVersion()) {
          bitField0_ |= 0x00002000;
          bpVersion_ = other.bpVersion_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (hasManu()) {
          if (!getManu().isInitialized()) {
            return false;
          }
        }
        return true;
      }

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

      private Object model_ = "";
      /**
       * <code>optional string model = 1;</code>
       * @return Whether the model field is set.
       */
      public boolean hasModel() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional string model = 1;</code>
       * @return The model.
       */
      public String getModel() {
        Object ref = model_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            model_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string model = 1;</code>
       * @return The bytes for model.
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        Object ref = model_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string model = 1;</code>
       * @param value The model to set.
       * @return This builder for chaining.
       */
      public Builder setModel(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        model_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearModel() {
        bitField0_ = (bitField0_ & ~0x00000001);
        model_ = getDefaultInstance().getModel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 1;</code>
       * @param value The bytes for model to set.
       * @return This builder for chaining.
       */
      public Builder setModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        model_ = value;
        onChanged();
        return this;
      }

      private Object version_ = "";
      /**
       * <code>optional string version = 2;</code>
       * @return Whether the version field is set.
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional string version = 2;</code>
       * @return The version.
       */
      public String getVersion() {
        Object ref = version_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            version_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string version = 2;</code>
       * @return The bytes for version.
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 2;</code>
       * @param value The version to set.
       * @return This builder for chaining.
       */
      public Builder setVersion(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 2;</code>
       * @param value The bytes for version to set.
       * @return This builder for chaining.
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        version_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString mac_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes mac = 3;</code>
       * @return Whether the mac field is set.
       */
      public boolean hasMac() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional bytes mac = 3;</code>
       * @return The mac.
       */
      public com.google.protobuf.ByteString getMac() {
        return mac_;
      }
      /**
       * <code>optional bytes mac = 3;</code>
       * @param value The mac to set.
       * @return This builder for chaining.
       */
      public Builder setMac(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        mac_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes mac = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearMac() {
        bitField0_ = (bitField0_ & ~0x00000004);
        mac_ = getDefaultInstance().getMac();
        onChanged();
        return this;
      }

      private int fota_ = 0;
      /**
       * <code>optional .DevInfoFota fota = 4;</code>
       * @return Whether the fota field is set.
       */
      public boolean hasFota() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .DevInfoFota fota = 4;</code>
       * @return The fota.
       */
      public DevInfoFota getFota() {
        @SuppressWarnings("deprecation")
        DevInfoFota result = DevInfoFota.valueOf(fota_);
        return result == null ? DevInfoFota.NON : result;
      }
      /**
       * <code>optional .DevInfoFota fota = 4;</code>
       * @param value The fota to set.
       * @return This builder for chaining.
       */
      public Builder setFota(DevInfoFota value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        fota_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .DevInfoFota fota = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearFota() {
        bitField0_ = (bitField0_ & ~0x00000008);
        fota_ = 0;
        onChanged();
        return this;
      }

      private DevInfoManu manu_;
      private com.google.protobuf.SingleFieldBuilderV3<
          DevInfoManu, DevInfoManu.Builder, DevInfoManuOrBuilder> manuBuilder_;
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       * @return Whether the manu field is set.
       */
      public boolean hasManu() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       * @return The manu.
       */
      public DevInfoManu getManu() {
        if (manuBuilder_ == null) {
          return manu_ == null ? DevInfoManu.getDefaultInstance() : manu_;
        } else {
          return manuBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       */
      public Builder setManu(DevInfoManu value) {
        if (manuBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          manu_ = value;
          onChanged();
        } else {
          manuBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       */
      public Builder setManu(
          DevInfoManu.Builder builderForValue) {
        if (manuBuilder_ == null) {
          manu_ = builderForValue.build();
          onChanged();
        } else {
          manuBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       */
      public Builder mergeManu(DevInfoManu value) {
        if (manuBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              manu_ != null &&
              manu_ != DevInfoManu.getDefaultInstance()) {
            manu_ =
              DevInfoManu.newBuilder(manu_).mergeFrom(value).buildPartial();
          } else {
            manu_ = value;
          }
          onChanged();
        } else {
          manuBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       */
      public Builder clearManu() {
        if (manuBuilder_ == null) {
          manu_ = null;
          onChanged();
        } else {
          manuBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       */
      public DevInfoManu.Builder getManuBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getManuFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       */
      public DevInfoManuOrBuilder getManuOrBuilder() {
        if (manuBuilder_ != null) {
          return manuBuilder_.getMessageOrBuilder();
        } else {
          return manu_ == null ?
              DevInfoManu.getDefaultInstance() : manu_;
        }
      }
      /**
       * <code>optional .DevInfoManu manu = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          DevInfoManu, DevInfoManu.Builder, DevInfoManuOrBuilder>
          getManuFieldBuilder() {
        if (manuBuilder_ == null) {
          manuBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              DevInfoManu, DevInfoManu.Builder, DevInfoManuOrBuilder>(
                  getManu(),
                  getParentForChildren(),
                  isClean());
          manu_ = null;
        }
        return manuBuilder_;
      }

      private com.google.protobuf.ByteString userData_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes user_data = 6;</code>
       * @return Whether the userData field is set.
       */
      public boolean hasUserData() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional bytes user_data = 6;</code>
       * @return The userData.
       */
      public com.google.protobuf.ByteString getUserData() {
        return userData_;
      }
      /**
       * <code>optional bytes user_data = 6;</code>
       * @param value The userData to set.
       * @return This builder for chaining.
       */
      public Builder setUserData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        userData_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes user_data = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearUserData() {
        bitField0_ = (bitField0_ & ~0x00000020);
        userData_ = getDefaultInstance().getUserData();
        onChanged();
        return this;
      }

      private Object pbVersion_ = "";
      /**
       * <code>optional string pb_version = 7;</code>
       * @return Whether the pbVersion field is set.
       */
      public boolean hasPbVersion() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional string pb_version = 7;</code>
       * @return The pbVersion.
       */
      public String getPbVersion() {
        Object ref = pbVersion_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            pbVersion_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string pb_version = 7;</code>
       * @return The bytes for pbVersion.
       */
      public com.google.protobuf.ByteString
          getPbVersionBytes() {
        Object ref = pbVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          pbVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string pb_version = 7;</code>
       * @param value The pbVersion to set.
       * @return This builder for chaining.
       */
      public Builder setPbVersion(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        pbVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string pb_version = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearPbVersion() {
        bitField0_ = (bitField0_ & ~0x00000040);
        pbVersion_ = getDefaultInstance().getPbVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string pb_version = 7;</code>
       * @param value The bytes for pbVersion to set.
       * @return This builder for chaining.
       */
      public Builder setPbVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        pbVersion_ = value;
        onChanged();
        return this;
      }

      private int ctpCs_ ;
      /**
       * <code>optional fixed32 ctp_cs = 8;</code>
       * @return Whether the ctpCs field is set.
       */
      public boolean hasCtpCs() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional fixed32 ctp_cs = 8;</code>
       * @return The ctpCs.
       */
      public int getCtpCs() {
        return ctpCs_;
      }
      /**
       * <code>optional fixed32 ctp_cs = 8;</code>
       * @param value The ctpCs to set.
       * @return This builder for chaining.
       */
      public Builder setCtpCs(int value) {
        bitField0_ |= 0x00000080;
        ctpCs_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 ctp_cs = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearCtpCs() {
        bitField0_ = (bitField0_ & ~0x00000080);
        ctpCs_ = 0;
        onChanged();
        return this;
      }

      private int programAddr_ ;
      /**
       * <code>optional fixed32 program_addr = 9;</code>
       * @return Whether the programAddr field is set.
       */
      public boolean hasProgramAddr() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional fixed32 program_addr = 9;</code>
       * @return The programAddr.
       */
      public int getProgramAddr() {
        return programAddr_;
      }
      /**
       * <code>optional fixed32 program_addr = 9;</code>
       * @param value The programAddr to set.
       * @return This builder for chaining.
       */
      public Builder setProgramAddr(int value) {
        bitField0_ |= 0x00000100;
        programAddr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 program_addr = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearProgramAddr() {
        bitField0_ = (bitField0_ & ~0x00000100);
        programAddr_ = 0;
        onChanged();
        return this;
      }

      private int resourceAddr_ ;
      /**
       * <code>optional fixed32 resource_addr = 10;</code>
       * @return Whether the resourceAddr field is set.
       */
      public boolean hasResourceAddr() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <code>optional fixed32 resource_addr = 10;</code>
       * @return The resourceAddr.
       */
      public int getResourceAddr() {
        return resourceAddr_;
      }
      /**
       * <code>optional fixed32 resource_addr = 10;</code>
       * @param value The resourceAddr to set.
       * @return This builder for chaining.
       */
      public Builder setResourceAddr(int value) {
        bitField0_ |= 0x00000200;
        resourceAddr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 resource_addr = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearResourceAddr() {
        bitField0_ = (bitField0_ & ~0x00000200);
        resourceAddr_ = 0;
        onChanged();
        return this;
      }

      private boolean apnContext_ ;
      /**
       * <code>optional bool apn_context = 11;</code>
       * @return Whether the apnContext field is set.
       */
      public boolean hasApnContext() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <code>optional bool apn_context = 11;</code>
       * @return The apnContext.
       */
      public boolean getApnContext() {
        return apnContext_;
      }
      /**
       * <code>optional bool apn_context = 11;</code>
       * @param value The apnContext to set.
       * @return This builder for chaining.
       */
      public Builder setApnContext(boolean value) {
        bitField0_ |= 0x00000400;
        apnContext_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool apn_context = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearApnContext() {
        bitField0_ = (bitField0_ & ~0x00000400);
        apnContext_ = false;
        onChanged();
        return this;
      }

      private Object bleName_ = "";
      /**
       * <code>optional string ble_name = 12;</code>
       * @return Whether the bleName field is set.
       */
      public boolean hasBleName() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <code>optional string ble_name = 12;</code>
       * @return The bleName.
       */
      public String getBleName() {
        Object ref = bleName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            bleName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string ble_name = 12;</code>
       * @return The bytes for bleName.
       */
      public com.google.protobuf.ByteString
          getBleNameBytes() {
        Object ref = bleName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          bleName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string ble_name = 12;</code>
       * @param value The bleName to set.
       * @return This builder for chaining.
       */
      public Builder setBleName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        bleName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string ble_name = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearBleName() {
        bitField0_ = (bitField0_ & ~0x00000800);
        bleName_ = getDefaultInstance().getBleName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string ble_name = 12;</code>
       * @param value The bytes for bleName to set.
       * @return This builder for chaining.
       */
      public Builder setBleNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        bleName_ = value;
        onChanged();
        return this;
      }

      private int encryptionStatus_ ;
      /**
       * <code>optional fixed32 encryption_status = 13;</code>
       * @return Whether the encryptionStatus field is set.
       */
      public boolean hasEncryptionStatus() {
        return ((bitField0_ & 0x00001000) != 0);
      }
      /**
       * <code>optional fixed32 encryption_status = 13;</code>
       * @return The encryptionStatus.
       */
      public int getEncryptionStatus() {
        return encryptionStatus_;
      }
      /**
       * <code>optional fixed32 encryption_status = 13;</code>
       * @param value The encryptionStatus to set.
       * @return This builder for chaining.
       */
      public Builder setEncryptionStatus(int value) {
        bitField0_ |= 0x00001000;
        encryptionStatus_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 encryption_status = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearEncryptionStatus() {
        bitField0_ = (bitField0_ & ~0x00001000);
        encryptionStatus_ = 0;
        onChanged();
        return this;
      }

      private Object bpVersion_ = "";
      /**
       * <code>optional string bp_version = 14;</code>
       * @return Whether the bpVersion field is set.
       */
      public boolean hasBpVersion() {
        return ((bitField0_ & 0x00002000) != 0);
      }
      /**
       * <code>optional string bp_version = 14;</code>
       * @return The bpVersion.
       */
      public String getBpVersion() {
        Object ref = bpVersion_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            bpVersion_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string bp_version = 14;</code>
       * @return The bytes for bpVersion.
       */
      public com.google.protobuf.ByteString
          getBpVersionBytes() {
        Object ref = bpVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          bpVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string bp_version = 14;</code>
       * @param value The bpVersion to set.
       * @return This builder for chaining.
       */
      public Builder setBpVersion(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        bpVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string bp_version = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearBpVersion() {
        bitField0_ = (bitField0_ & ~0x00002000);
        bpVersion_ = getDefaultInstance().getBpVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string bp_version = 14;</code>
       * @param value The bytes for bpVersion to set.
       * @return This builder for chaining.
       */
      public Builder setBpVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        bpVersion_ = value;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:DeviceInfoResponse)
    }

    // @@protoc_insertion_point(class_scope:DeviceInfoResponse)
    private static final DeviceInfoResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new DeviceInfoResponse();
    }

    public static DeviceInfoResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

    public static com.google.protobuf.Parser<DeviceInfoResponse> parser() {
      return PARSER;
    }

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

    @Override
    public DeviceInfoResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeviceInfoCommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:DeviceInfoCommand)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bytes user_data = 1;</code>
     * @return Whether the userData field is set.
     */
    boolean hasUserData();
    /**
     * <code>optional bytes user_data = 1;</code>
     * @return The userData.
     */
    com.google.protobuf.ByteString getUserData();

    /**
     * <code>optional .DeviceInfoapn apn_context = 2;</code>
     * @return Whether the apnContext field is set.
     */
    boolean hasApnContext();
    /**
     * <code>optional .DeviceInfoapn apn_context = 2;</code>
     * @return The apnContext.
     */
    DeviceInfoapn getApnContext();
    /**
     * <code>optional .DeviceInfoapn apn_context = 2;</code>
     */
    DeviceInfoapnOrBuilder getApnContextOrBuilder();

    /**
     * <code>optional string data_url = 3;</code>
     * @return Whether the dataUrl field is set.
     */
    boolean hasDataUrl();
    /**
     * <code>optional string data_url = 3;</code>
     * @return The dataUrl.
     */
    String getDataUrl();
    /**
     * <code>optional string data_url = 3;</code>
     * @return The bytes for dataUrl.
     */
    com.google.protobuf.ByteString
        getDataUrlBytes();

    /**
     * <code>optional fixed32 Resonant_frequency = 4;</code>
     * @return Whether the resonantFrequency field is set.
     */
    boolean hasResonantFrequency();
    /**
     * <code>optional fixed32 Resonant_frequency = 4;</code>
     * @return The resonantFrequency.
     */
    int getResonantFrequency();

    /**
     * <code>optional string app_qr_url = 5;</code>
     * @return Whether the appQrUrl field is set.
     */
    boolean hasAppQrUrl();
    /**
     * <code>optional string app_qr_url = 5;</code>
     * @return The appQrUrl.
     */
    String getAppQrUrl();
    /**
     * <code>optional string app_qr_url = 5;</code>
     * @return The bytes for appQrUrl.
     */
    com.google.protobuf.ByteString
        getAppQrUrlBytes();

    /**
     * <code>optional string ble_name = 6;</code>
     * @return Whether the bleName field is set.
     */
    boolean hasBleName();
    /**
     * <code>optional string ble_name = 6;</code>
     * @return The bleName.
     */
    String getBleName();
    /**
     * <code>optional string ble_name = 6;</code>
     * @return The bytes for bleName.
     */
    com.google.protobuf.ByteString
        getBleNameBytes();

    /**
     * <code>optional bytes Other_info_data = 7;</code>
     * @return Whether the otherInfoData field is set.
     */
    boolean hasOtherInfoData();
    /**
     * <code>optional bytes Other_info_data = 7;</code>
     * @return The otherInfoData.
     */
    com.google.protobuf.ByteString getOtherInfoData();

    /**
     * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
     * @return Whether the deviceIRemainingSum field is set.
     */
    boolean hasDeviceIRemainingSum();
    /**
     * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
     * @return The deviceIRemainingSum.
     */
    int getDeviceIRemainingSum();
  }
  /**
   * Protobuf type {@code DeviceInfoCommand}
   */
  public  static final class DeviceInfoCommand extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:DeviceInfoCommand)
      DeviceInfoCommandOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeviceInfoCommand.newBuilder() to construct.
    private DeviceInfoCommand(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeviceInfoCommand() {
      userData_ = com.google.protobuf.ByteString.EMPTY;
      dataUrl_ = "";
      appQrUrl_ = "";
      bleName_ = "";
      otherInfoData_ = com.google.protobuf.ByteString.EMPTY;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new DeviceInfoCommand();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceInfoCommand(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      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;
            case 10: {
              bitField0_ |= 0x00000001;
              userData_ = input.readBytes();
              break;
            }
            case 18: {
              DeviceInfoapn.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = apnContext_.toBuilder();
              }
              apnContext_ = input.readMessage(DeviceInfoapn.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(apnContext_);
                apnContext_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              dataUrl_ = bs;
              break;
            }
            case 37: {
              bitField0_ |= 0x00000008;
              resonantFrequency_ = input.readFixed32();
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              appQrUrl_ = bs;
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              bleName_ = bs;
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              otherInfoData_ = input.readBytes();
              break;
            }
            case 69: {
              bitField0_ |= 0x00000080;
              deviceIRemainingSum_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return DevInfo.internal_static_DeviceInfoCommand_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return DevInfo.internal_static_DeviceInfoCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              DeviceInfoCommand.class, Builder.class);
    }

    private int bitField0_;
    public static final int USER_DATA_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString userData_;
    /**
     * <code>optional bytes user_data = 1;</code>
     * @return Whether the userData field is set.
     */
    public boolean hasUserData() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bytes user_data = 1;</code>
     * @return The userData.
     */
    public com.google.protobuf.ByteString getUserData() {
      return userData_;
    }

    public static final int APN_CONTEXT_FIELD_NUMBER = 2;
    private DeviceInfoapn apnContext_;
    /**
     * <code>optional .DeviceInfoapn apn_context = 2;</code>
     * @return Whether the apnContext field is set.
     */
    public boolean hasApnContext() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .DeviceInfoapn apn_context = 2;</code>
     * @return The apnContext.
     */
    public DeviceInfoapn getApnContext() {
      return apnContext_ == null ? DeviceInfoapn.getDefaultInstance() : apnContext_;
    }
    /**
     * <code>optional .DeviceInfoapn apn_context = 2;</code>
     */
    public DeviceInfoapnOrBuilder getApnContextOrBuilder() {
      return apnContext_ == null ? DeviceInfoapn.getDefaultInstance() : apnContext_;
    }

    public static final int DATA_URL_FIELD_NUMBER = 3;
    private volatile Object dataUrl_;
    /**
     * <code>optional string data_url = 3;</code>
     * @return Whether the dataUrl field is set.
     */
    public boolean hasDataUrl() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional string data_url = 3;</code>
     * @return The dataUrl.
     */
    public String getDataUrl() {
      Object ref = dataUrl_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          dataUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string data_url = 3;</code>
     * @return The bytes for dataUrl.
     */
    public com.google.protobuf.ByteString
        getDataUrlBytes() {
      Object ref = dataUrl_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        dataUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RESONANT_FREQUENCY_FIELD_NUMBER = 4;
    private int resonantFrequency_;
    /**
     * <code>optional fixed32 Resonant_frequency = 4;</code>
     * @return Whether the resonantFrequency field is set.
     */
    public boolean hasResonantFrequency() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional fixed32 Resonant_frequency = 4;</code>
     * @return The resonantFrequency.
     */
    public int getResonantFrequency() {
      return resonantFrequency_;
    }

    public static final int APP_QR_URL_FIELD_NUMBER = 5;
    private volatile Object appQrUrl_;
    /**
     * <code>optional string app_qr_url = 5;</code>
     * @return Whether the appQrUrl field is set.
     */
    public boolean hasAppQrUrl() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional string app_qr_url = 5;</code>
     * @return The appQrUrl.
     */
    public String getAppQrUrl() {
      Object ref = appQrUrl_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          appQrUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string app_qr_url = 5;</code>
     * @return The bytes for appQrUrl.
     */
    public com.google.protobuf.ByteString
        getAppQrUrlBytes() {
      Object ref = appQrUrl_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        appQrUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int BLE_NAME_FIELD_NUMBER = 6;
    private volatile Object bleName_;
    /**
     * <code>optional string ble_name = 6;</code>
     * @return Whether the bleName field is set.
     */
    public boolean hasBleName() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional string ble_name = 6;</code>
     * @return The bleName.
     */
    public String getBleName() {
      Object ref = bleName_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          bleName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string ble_name = 6;</code>
     * @return The bytes for bleName.
     */
    public com.google.protobuf.ByteString
        getBleNameBytes() {
      Object ref = bleName_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        bleName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OTHER_INFO_DATA_FIELD_NUMBER = 7;
    private com.google.protobuf.ByteString otherInfoData_;
    /**
     * <code>optional bytes Other_info_data = 7;</code>
     * @return Whether the otherInfoData field is set.
     */
    public boolean hasOtherInfoData() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional bytes Other_info_data = 7;</code>
     * @return The otherInfoData.
     */
    public com.google.protobuf.ByteString getOtherInfoData() {
      return otherInfoData_;
    }

    public static final int DEVICEI_REMAINING_SUM_FIELD_NUMBER = 8;
    private int deviceIRemainingSum_;
    /**
     * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
     * @return Whether the deviceIRemainingSum field is set.
     */
    public boolean hasDeviceIRemainingSum() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
     * @return The deviceIRemainingSum.
     */
    public int getDeviceIRemainingSum() {
      return deviceIRemainingSum_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

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

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBytes(1, userData_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(2, getApnContext());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, dataUrl_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeFixed32(4, resonantFrequency_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, appQrUrl_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, bleName_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeBytes(7, otherInfoData_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeFixed32(8, deviceIRemainingSum_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, userData_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getApnContext());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, dataUrl_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(4, resonantFrequency_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, appQrUrl_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, bleName_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, otherInfoData_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(8, deviceIRemainingSum_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof DeviceInfoCommand)) {
        return super.equals(obj);
      }
      DeviceInfoCommand other = (DeviceInfoCommand) obj;

      if (hasUserData() != other.hasUserData()) return false;
      if (hasUserData()) {
        if (!getUserData()
            .equals(other.getUserData())) return false;
      }
      if (hasApnContext() != other.hasApnContext()) return false;
      if (hasApnContext()) {
        if (!getApnContext()
            .equals(other.getApnContext())) return false;
      }
      if (hasDataUrl() != other.hasDataUrl()) return false;
      if (hasDataUrl()) {
        if (!getDataUrl()
            .equals(other.getDataUrl())) return false;
      }
      if (hasResonantFrequency() != other.hasResonantFrequency()) return false;
      if (hasResonantFrequency()) {
        if (getResonantFrequency()
            != other.getResonantFrequency()) return false;
      }
      if (hasAppQrUrl() != other.hasAppQrUrl()) return false;
      if (hasAppQrUrl()) {
        if (!getAppQrUrl()
            .equals(other.getAppQrUrl())) return false;
      }
      if (hasBleName() != other.hasBleName()) return false;
      if (hasBleName()) {
        if (!getBleName()
            .equals(other.getBleName())) return false;
      }
      if (hasOtherInfoData() != other.hasOtherInfoData()) return false;
      if (hasOtherInfoData()) {
        if (!getOtherInfoData()
            .equals(other.getOtherInfoData())) return false;
      }
      if (hasDeviceIRemainingSum() != other.hasDeviceIRemainingSum()) return false;
      if (hasDeviceIRemainingSum()) {
        if (getDeviceIRemainingSum()
            != other.getDeviceIRemainingSum()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasUserData()) {
        hash = (37 * hash) + USER_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getUserData().hashCode();
      }
      if (hasApnContext()) {
        hash = (37 * hash) + APN_CONTEXT_FIELD_NUMBER;
        hash = (53 * hash) + getApnContext().hashCode();
      }
      if (hasDataUrl()) {
        hash = (37 * hash) + DATA_URL_FIELD_NUMBER;
        hash = (53 * hash) + getDataUrl().hashCode();
      }
      if (hasResonantFrequency()) {
        hash = (37 * hash) + RESONANT_FREQUENCY_FIELD_NUMBER;
        hash = (53 * hash) + getResonantFrequency();
      }
      if (hasAppQrUrl()) {
        hash = (37 * hash) + APP_QR_URL_FIELD_NUMBER;
        hash = (53 * hash) + getAppQrUrl().hashCode();
      }
      if (hasBleName()) {
        hash = (37 * hash) + BLE_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getBleName().hashCode();
      }
      if (hasOtherInfoData()) {
        hash = (37 * hash) + OTHER_INFO_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getOtherInfoData().hashCode();
      }
      if (hasDeviceIRemainingSum()) {
        hash = (37 * hash) + DEVICEI_REMAINING_SUM_FIELD_NUMBER;
        hash = (53 * hash) + getDeviceIRemainingSum();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static DeviceInfoCommand parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoCommand parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static DeviceInfoCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(DeviceInfoCommand prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DeviceInfoCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:DeviceInfoCommand)
        DeviceInfoCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return DevInfo.internal_static_DeviceInfoCommand_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return DevInfo.internal_static_DeviceInfoCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                DeviceInfoCommand.class, Builder.class);
      }

      // Construct using DevInfo.DeviceInfoCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getApnContextFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        userData_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (apnContextBuilder_ == null) {
          apnContext_ = null;
        } else {
          apnContextBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        dataUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        resonantFrequency_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        appQrUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        bleName_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        otherInfoData_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        deviceIRemainingSum_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return DevInfo.internal_static_DeviceInfoCommand_descriptor;
      }

      @Override
      public DeviceInfoCommand getDefaultInstanceForType() {
        return DeviceInfoCommand.getDefaultInstance();
      }

      @Override
      public DeviceInfoCommand build() {
        DeviceInfoCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public DeviceInfoCommand buildPartial() {
        DeviceInfoCommand result = new DeviceInfoCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          to_bitField0_ |= 0x00000001;
        }
        result.userData_ = userData_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (apnContextBuilder_ == null) {
            result.apnContext_ = apnContext_;
          } else {
            result.apnContext_ = apnContextBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.dataUrl_ = dataUrl_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.resonantFrequency_ = resonantFrequency_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.appQrUrl_ = appQrUrl_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          to_bitField0_ |= 0x00000020;
        }
        result.bleName_ = bleName_;
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.otherInfoData_ = otherInfoData_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.deviceIRemainingSum_ = deviceIRemainingSum_;
          to_bitField0_ |= 0x00000080;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof DeviceInfoCommand) {
          return mergeFrom((DeviceInfoCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(DeviceInfoCommand other) {
        if (other == DeviceInfoCommand.getDefaultInstance()) return this;
        if (other.hasUserData()) {
          setUserData(other.getUserData());
        }
        if (other.hasApnContext()) {
          mergeApnContext(other.getApnContext());
        }
        if (other.hasDataUrl()) {
          bitField0_ |= 0x00000004;
          dataUrl_ = other.dataUrl_;
          onChanged();
        }
        if (other.hasResonantFrequency()) {
          setResonantFrequency(other.getResonantFrequency());
        }
        if (other.hasAppQrUrl()) {
          bitField0_ |= 0x00000010;
          appQrUrl_ = other.appQrUrl_;
          onChanged();
        }
        if (other.hasBleName()) {
          bitField0_ |= 0x00000020;
          bleName_ = other.bleName_;
          onChanged();
        }
        if (other.hasOtherInfoData()) {
          setOtherInfoData(other.getOtherInfoData());
        }
        if (other.hasDeviceIRemainingSum()) {
          setDeviceIRemainingSum(other.getDeviceIRemainingSum());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (hasApnContext()) {
          if (!getApnContext().isInitialized()) {
            return false;
          }
        }
        return true;
      }

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

      private com.google.protobuf.ByteString userData_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes user_data = 1;</code>
       * @return Whether the userData field is set.
       */
      public boolean hasUserData() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bytes user_data = 1;</code>
       * @return The userData.
       */
      public com.google.protobuf.ByteString getUserData() {
        return userData_;
      }
      /**
       * <code>optional bytes user_data = 1;</code>
       * @param value The userData to set.
       * @return This builder for chaining.
       */
      public Builder setUserData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        userData_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes user_data = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUserData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        userData_ = getDefaultInstance().getUserData();
        onChanged();
        return this;
      }

      private DeviceInfoapn apnContext_;
      private com.google.protobuf.SingleFieldBuilderV3<
          DeviceInfoapn, DeviceInfoapn.Builder, DeviceInfoapnOrBuilder> apnContextBuilder_;
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       * @return Whether the apnContext field is set.
       */
      public boolean hasApnContext() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       * @return The apnContext.
       */
      public DeviceInfoapn getApnContext() {
        if (apnContextBuilder_ == null) {
          return apnContext_ == null ? DeviceInfoapn.getDefaultInstance() : apnContext_;
        } else {
          return apnContextBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       */
      public Builder setApnContext(DeviceInfoapn value) {
        if (apnContextBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          apnContext_ = value;
          onChanged();
        } else {
          apnContextBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       */
      public Builder setApnContext(
          DeviceInfoapn.Builder builderForValue) {
        if (apnContextBuilder_ == null) {
          apnContext_ = builderForValue.build();
          onChanged();
        } else {
          apnContextBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       */
      public Builder mergeApnContext(DeviceInfoapn value) {
        if (apnContextBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              apnContext_ != null &&
              apnContext_ != DeviceInfoapn.getDefaultInstance()) {
            apnContext_ =
              DeviceInfoapn.newBuilder(apnContext_).mergeFrom(value).buildPartial();
          } else {
            apnContext_ = value;
          }
          onChanged();
        } else {
          apnContextBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       */
      public Builder clearApnContext() {
        if (apnContextBuilder_ == null) {
          apnContext_ = null;
          onChanged();
        } else {
          apnContextBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       */
      public DeviceInfoapn.Builder getApnContextBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getApnContextFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       */
      public DeviceInfoapnOrBuilder getApnContextOrBuilder() {
        if (apnContextBuilder_ != null) {
          return apnContextBuilder_.getMessageOrBuilder();
        } else {
          return apnContext_ == null ?
              DeviceInfoapn.getDefaultInstance() : apnContext_;
        }
      }
      /**
       * <code>optional .DeviceInfoapn apn_context = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          DeviceInfoapn, DeviceInfoapn.Builder, DeviceInfoapnOrBuilder>
          getApnContextFieldBuilder() {
        if (apnContextBuilder_ == null) {
          apnContextBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              DeviceInfoapn, DeviceInfoapn.Builder, DeviceInfoapnOrBuilder>(
                  getApnContext(),
                  getParentForChildren(),
                  isClean());
          apnContext_ = null;
        }
        return apnContextBuilder_;
      }

      private Object dataUrl_ = "";
      /**
       * <code>optional string data_url = 3;</code>
       * @return Whether the dataUrl field is set.
       */
      public boolean hasDataUrl() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional string data_url = 3;</code>
       * @return The dataUrl.
       */
      public String getDataUrl() {
        Object ref = dataUrl_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            dataUrl_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string data_url = 3;</code>
       * @return The bytes for dataUrl.
       */
      public com.google.protobuf.ByteString
          getDataUrlBytes() {
        Object ref = dataUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          dataUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string data_url = 3;</code>
       * @param value The dataUrl to set.
       * @return This builder for chaining.
       */
      public Builder setDataUrl(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        dataUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string data_url = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDataUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        dataUrl_ = getDefaultInstance().getDataUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string data_url = 3;</code>
       * @param value The bytes for dataUrl to set.
       * @return This builder for chaining.
       */
      public Builder setDataUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        dataUrl_ = value;
        onChanged();
        return this;
      }

      private int resonantFrequency_ ;
      /**
       * <code>optional fixed32 Resonant_frequency = 4;</code>
       * @return Whether the resonantFrequency field is set.
       */
      public boolean hasResonantFrequency() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional fixed32 Resonant_frequency = 4;</code>
       * @return The resonantFrequency.
       */
      public int getResonantFrequency() {
        return resonantFrequency_;
      }
      /**
       * <code>optional fixed32 Resonant_frequency = 4;</code>
       * @param value The resonantFrequency to set.
       * @return This builder for chaining.
       */
      public Builder setResonantFrequency(int value) {
        bitField0_ |= 0x00000008;
        resonantFrequency_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 Resonant_frequency = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearResonantFrequency() {
        bitField0_ = (bitField0_ & ~0x00000008);
        resonantFrequency_ = 0;
        onChanged();
        return this;
      }

      private Object appQrUrl_ = "";
      /**
       * <code>optional string app_qr_url = 5;</code>
       * @return Whether the appQrUrl field is set.
       */
      public boolean hasAppQrUrl() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional string app_qr_url = 5;</code>
       * @return The appQrUrl.
       */
      public String getAppQrUrl() {
        Object ref = appQrUrl_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            appQrUrl_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string app_qr_url = 5;</code>
       * @return The bytes for appQrUrl.
       */
      public com.google.protobuf.ByteString
          getAppQrUrlBytes() {
        Object ref = appQrUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          appQrUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string app_qr_url = 5;</code>
       * @param value The appQrUrl to set.
       * @return This builder for chaining.
       */
      public Builder setAppQrUrl(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        appQrUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string app_qr_url = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearAppQrUrl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        appQrUrl_ = getDefaultInstance().getAppQrUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string app_qr_url = 5;</code>
       * @param value The bytes for appQrUrl to set.
       * @return This builder for chaining.
       */
      public Builder setAppQrUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        appQrUrl_ = value;
        onChanged();
        return this;
      }

      private Object bleName_ = "";
      /**
       * <code>optional string ble_name = 6;</code>
       * @return Whether the bleName field is set.
       */
      public boolean hasBleName() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional string ble_name = 6;</code>
       * @return The bleName.
       */
      public String getBleName() {
        Object ref = bleName_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            bleName_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string ble_name = 6;</code>
       * @return The bytes for bleName.
       */
      public com.google.protobuf.ByteString
          getBleNameBytes() {
        Object ref = bleName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          bleName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string ble_name = 6;</code>
       * @param value The bleName to set.
       * @return This builder for chaining.
       */
      public Builder setBleName(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        bleName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string ble_name = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearBleName() {
        bitField0_ = (bitField0_ & ~0x00000020);
        bleName_ = getDefaultInstance().getBleName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string ble_name = 6;</code>
       * @param value The bytes for bleName to set.
       * @return This builder for chaining.
       */
      public Builder setBleNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        bleName_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString otherInfoData_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes Other_info_data = 7;</code>
       * @return Whether the otherInfoData field is set.
       */
      public boolean hasOtherInfoData() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional bytes Other_info_data = 7;</code>
       * @return The otherInfoData.
       */
      public com.google.protobuf.ByteString getOtherInfoData() {
        return otherInfoData_;
      }
      /**
       * <code>optional bytes Other_info_data = 7;</code>
       * @param value The otherInfoData to set.
       * @return This builder for chaining.
       */
      public Builder setOtherInfoData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        otherInfoData_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes Other_info_data = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearOtherInfoData() {
        bitField0_ = (bitField0_ & ~0x00000040);
        otherInfoData_ = getDefaultInstance().getOtherInfoData();
        onChanged();
        return this;
      }

      private int deviceIRemainingSum_ ;
      /**
       * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
       * @return Whether the deviceIRemainingSum field is set.
       */
      public boolean hasDeviceIRemainingSum() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
       * @return The deviceIRemainingSum.
       */
      public int getDeviceIRemainingSum() {
        return deviceIRemainingSum_;
      }
      /**
       * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
       * @param value The deviceIRemainingSum to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceIRemainingSum(int value) {
        bitField0_ |= 0x00000080;
        deviceIRemainingSum_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 DeviceI_remaining_sum = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearDeviceIRemainingSum() {
        bitField0_ = (bitField0_ & ~0x00000080);
        deviceIRemainingSum_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:DeviceInfoCommand)
    }

    // @@protoc_insertion_point(class_scope:DeviceInfoCommand)
    private static final DeviceInfoCommand DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new DeviceInfoCommand();
    }

    public static DeviceInfoCommand getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

    public static com.google.protobuf.Parser<DeviceInfoCommand> parser() {
      return PARSER;
    }

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

    @Override
    public DeviceInfoCommand getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeviceInfoRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:DeviceInfoRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional fixed32 reserved = 1;</code>
     * @return Whether the reserved field is set.
     */
    boolean hasReserved();
    /**
     * <code>optional fixed32 reserved = 1;</code>
     * @return The reserved.
     */
    int getReserved();

    /**
     * <code>required .DevInfoOperation operation = 2;</code>
     * @return Whether the operation field is set.
     */
    boolean hasOperation();
    /**
     * <code>required .DevInfoOperation operation = 2;</code>
     * @return The operation.
     */
    DevInfoOperation getOperation();

    /**
     * <code>optional .DeviceInfoCommand devinfo = 3;</code>
     * @return Whether the devinfo field is set.
     */
    boolean hasDevinfo();
    /**
     * <code>optional .DeviceInfoCommand devinfo = 3;</code>
     * @return The devinfo.
     */
    DeviceInfoCommand getDevinfo();
    /**
     * <code>optional .DeviceInfoCommand devinfo = 3;</code>
     */
    DeviceInfoCommandOrBuilder getDevinfoOrBuilder();
  }
  /**
   * Protobuf type {@code DeviceInfoRequest}
   */
  public  static final class DeviceInfoRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:DeviceInfoRequest)
      DeviceInfoRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeviceInfoRequest.newBuilder() to construct.
    private DeviceInfoRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeviceInfoRequest() {
      operation_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new DeviceInfoRequest();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceInfoRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      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;
            case 13: {
              bitField0_ |= 0x00000001;
              reserved_ = input.readFixed32();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              DevInfoOperation value = DevInfoOperation.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                operation_ = rawValue;
              }
              break;
            }
            case 26: {
              DeviceInfoCommand.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) != 0)) {
                subBuilder = devinfo_.toBuilder();
              }
              devinfo_ = input.readMessage(DeviceInfoCommand.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(devinfo_);
                devinfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return DevInfo.internal_static_DeviceInfoRequest_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return DevInfo.internal_static_DeviceInfoRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              DeviceInfoRequest.class, Builder.class);
    }

    private int bitField0_;
    public static final int RESERVED_FIELD_NUMBER = 1;
    private int reserved_;
    /**
     * <code>optional fixed32 reserved = 1;</code>
     * @return Whether the reserved field is set.
     */
    public boolean hasReserved() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional fixed32 reserved = 1;</code>
     * @return The reserved.
     */
    public int getReserved() {
      return reserved_;
    }

    public static final int OPERATION_FIELD_NUMBER = 2;
    private int operation_;
    /**
     * <code>required .DevInfoOperation operation = 2;</code>
     * @return Whether the operation field is set.
     */
    public boolean hasOperation() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required .DevInfoOperation operation = 2;</code>
     * @return The operation.
     */
    public DevInfoOperation getOperation() {
      @SuppressWarnings("deprecation")
      DevInfoOperation result = DevInfoOperation.valueOf(operation_);
      return result == null ? DevInfoOperation.Read : result;
    }

    public static final int DEVINFO_FIELD_NUMBER = 3;
    private DeviceInfoCommand devinfo_;
    /**
     * <code>optional .DeviceInfoCommand devinfo = 3;</code>
     * @return Whether the devinfo field is set.
     */
    public boolean hasDevinfo() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .DeviceInfoCommand devinfo = 3;</code>
     * @return The devinfo.
     */
    public DeviceInfoCommand getDevinfo() {
      return devinfo_ == null ? DeviceInfoCommand.getDefaultInstance() : devinfo_;
    }
    /**
     * <code>optional .DeviceInfoCommand devinfo = 3;</code>
     */
    public DeviceInfoCommandOrBuilder getDevinfoOrBuilder() {
      return devinfo_ == null ? DeviceInfoCommand.getDefaultInstance() : devinfo_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasOperation()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasDevinfo()) {
        if (!getDevinfo().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, reserved_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeEnum(2, operation_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeMessage(3, getDevinfo());
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, reserved_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, operation_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getDevinfo());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof DeviceInfoRequest)) {
        return super.equals(obj);
      }
      DeviceInfoRequest other = (DeviceInfoRequest) obj;

      if (hasReserved() != other.hasReserved()) return false;
      if (hasReserved()) {
        if (getReserved()
            != other.getReserved()) return false;
      }
      if (hasOperation() != other.hasOperation()) return false;
      if (hasOperation()) {
        if (operation_ != other.operation_) return false;
      }
      if (hasDevinfo() != other.hasDevinfo()) return false;
      if (hasDevinfo()) {
        if (!getDevinfo()
            .equals(other.getDevinfo())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasReserved()) {
        hash = (37 * hash) + RESERVED_FIELD_NUMBER;
        hash = (53 * hash) + getReserved();
      }
      if (hasOperation()) {
        hash = (37 * hash) + OPERATION_FIELD_NUMBER;
        hash = (53 * hash) + operation_;
      }
      if (hasDevinfo()) {
        hash = (37 * hash) + DEVINFO_FIELD_NUMBER;
        hash = (53 * hash) + getDevinfo().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static DeviceInfoRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static DeviceInfoRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static DeviceInfoRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static DeviceInfoRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static DeviceInfoRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static DeviceInfoRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(DeviceInfoRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DeviceInfoRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:DeviceInfoRequest)
        DeviceInfoRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return DevInfo.internal_static_DeviceInfoRequest_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return DevInfo.internal_static_DeviceInfoRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                DeviceInfoRequest.class, Builder.class);
      }

      // Construct using DevInfo.DeviceInfoRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDevinfoFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        reserved_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        operation_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (devinfoBuilder_ == null) {
          devinfo_ = null;
        } else {
          devinfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return DevInfo.internal_static_DeviceInfoRequest_descriptor;
      }

      @Override
      public DeviceInfoRequest getDefaultInstanceForType() {
        return DeviceInfoRequest.getDefaultInstance();
      }

      @Override
      public DeviceInfoRequest build() {
        DeviceInfoRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public DeviceInfoRequest buildPartial() {
        DeviceInfoRequest result = new DeviceInfoRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.reserved_ = reserved_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          to_bitField0_ |= 0x00000002;
        }
        result.operation_ = operation_;
        if (((from_bitField0_ & 0x00000004) != 0)) {
          if (devinfoBuilder_ == null) {
            result.devinfo_ = devinfo_;
          } else {
            result.devinfo_ = devinfoBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof DeviceInfoRequest) {
          return mergeFrom((DeviceInfoRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(DeviceInfoRequest other) {
        if (other == DeviceInfoRequest.getDefaultInstance()) return this;
        if (other.hasReserved()) {
          setReserved(other.getReserved());
        }
        if (other.hasOperation()) {
          setOperation(other.getOperation());
        }
        if (other.hasDevinfo()) {
          mergeDevinfo(other.getDevinfo());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasOperation()) {
          return false;
        }
        if (hasDevinfo()) {
          if (!getDevinfo().isInitialized()) {
            return false;
          }
        }
        return true;
      }

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

      private int reserved_ ;
      /**
       * <code>optional fixed32 reserved = 1;</code>
       * @return Whether the reserved field is set.
       */
      public boolean hasReserved() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional fixed32 reserved = 1;</code>
       * @return The reserved.
       */
      public int getReserved() {
        return reserved_;
      }
      /**
       * <code>optional fixed32 reserved = 1;</code>
       * @param value The reserved to set.
       * @return This builder for chaining.
       */
      public Builder setReserved(int value) {
        bitField0_ |= 0x00000001;
        reserved_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 reserved = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearReserved() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reserved_ = 0;
        onChanged();
        return this;
      }

      private int operation_ = 0;
      /**
       * <code>required .DevInfoOperation operation = 2;</code>
       * @return Whether the operation field is set.
       */
      public boolean hasOperation() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required .DevInfoOperation operation = 2;</code>
       * @return The operation.
       */
      public DevInfoOperation getOperation() {
        @SuppressWarnings("deprecation")
        DevInfoOperation result = DevInfoOperation.valueOf(operation_);
        return result == null ? DevInfoOperation.Read : result;
      }
      /**
       * <code>required .DevInfoOperation operation = 2;</code>
       * @param value The operation to set.
       * @return This builder for chaining.
       */
      public Builder setOperation(DevInfoOperation value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        operation_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .DevInfoOperation operation = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearOperation() {
        bitField0_ = (bitField0_ & ~0x00000002);
        operation_ = 0;
        onChanged();
        return this;
      }

      private DeviceInfoCommand devinfo_;
      private com.google.protobuf.SingleFieldBuilderV3<
          DeviceInfoCommand, DeviceInfoCommand.Builder, DeviceInfoCommandOrBuilder> devinfoBuilder_;
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       * @return Whether the devinfo field is set.
       */
      public boolean hasDevinfo() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       * @return The devinfo.
       */
      public DeviceInfoCommand getDevinfo() {
        if (devinfoBuilder_ == null) {
          return devinfo_ == null ? DeviceInfoCommand.getDefaultInstance() : devinfo_;
        } else {
          return devinfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       */
      public Builder setDevinfo(DeviceInfoCommand value) {
        if (devinfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          devinfo_ = value;
          onChanged();
        } else {
          devinfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       */
      public Builder setDevinfo(
          DeviceInfoCommand.Builder builderForValue) {
        if (devinfoBuilder_ == null) {
          devinfo_ = builderForValue.build();
          onChanged();
        } else {
          devinfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       */
      public Builder mergeDevinfo(DeviceInfoCommand value) {
        if (devinfoBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0) &&
              devinfo_ != null &&
              devinfo_ != DeviceInfoCommand.getDefaultInstance()) {
            devinfo_ =
              DeviceInfoCommand.newBuilder(devinfo_).mergeFrom(value).buildPartial();
          } else {
            devinfo_ = value;
          }
          onChanged();
        } else {
          devinfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       */
      public Builder clearDevinfo() {
        if (devinfoBuilder_ == null) {
          devinfo_ = null;
          onChanged();
        } else {
          devinfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       */
      public DeviceInfoCommand.Builder getDevinfoBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getDevinfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       */
      public DeviceInfoCommandOrBuilder getDevinfoOrBuilder() {
        if (devinfoBuilder_ != null) {
          return devinfoBuilder_.getMessageOrBuilder();
        } else {
          return devinfo_ == null ?
              DeviceInfoCommand.getDefaultInstance() : devinfo_;
        }
      }
      /**
       * <code>optional .DeviceInfoCommand devinfo = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          DeviceInfoCommand, DeviceInfoCommand.Builder, DeviceInfoCommandOrBuilder>
          getDevinfoFieldBuilder() {
        if (devinfoBuilder_ == null) {
          devinfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              DeviceInfoCommand, DeviceInfoCommand.Builder, DeviceInfoCommandOrBuilder>(
                  getDevinfo(),
                  getParentForChildren(),
                  isClean());
          devinfo_ = null;
        }
        return devinfoBuilder_;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:DeviceInfoRequest)
    }

    // @@protoc_insertion_point(class_scope:DeviceInfoRequest)
    private static final DeviceInfoRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new DeviceInfoRequest();
    }

    public static DeviceInfoRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

    public static com.google.protobuf.Parser<DeviceInfoRequest> parser() {
      return PARSER;
    }

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

    @Override
    public DeviceInfoRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_DevInfoManu_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_DevInfoManu_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_DeviceInfoapn_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_DeviceInfoapn_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_DeviceInfoResponse_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_DeviceInfoResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_DeviceInfoCommand_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_DeviceInfoCommand_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_DeviceInfoRequest_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_DeviceInfoRequest_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    String[] descriptorData = {
      "\n\016dev_info.proto\",\n\013DevInfoManu\022\014\n\004date\030" +
      "\001 \002(\t\022\017\n\007factory\030\002 \002(\t\"\242\001\n\rDeviceInfoapn" +
      "\022\013\n\003mcc\030\001 \002(\007\022\013\n\003mnc\030\002 \002(\007\022\024\n\014setting_na" +
      "me\030\003 \002(\t\022\021\n\tauth_type\030\004 \002(\007\022\030\n\020roaming_p" +
      "rotocol\030\005 \002(\007\022\017\n\007apn_str\030\006 \002(\t\022\021\n\tuser_n" +
      "ame\030\007 \002(\t\022\020\n\010password\030\010 \002(\t\"\263\002\n\022DeviceIn" +
      "foResponse\022\r\n\005model\030\001 \001(\t\022\017\n\007version\030\002 \001" +
      "(\t\022\013\n\003mac\030\003 \001(\014\022\032\n\004fota\030\004 \001(\0162\014.DevInfoF" +
      "ota\022\032\n\004manu\030\005 \001(\0132\014.DevInfoManu\022\021\n\tuser_" +
      "data\030\006 \001(\014\022\022\n\npb_version\030\007 \001(\t\022\016\n\006ctp_cs" +
      "\030\010 \001(\007\022\024\n\014program_addr\030\t \001(\007\022\025\n\rresource" +
      "_addr\030\n \001(\007\022\023\n\013apn_context\030\013 \001(\010\022\020\n\010ble_" +
      "name\030\014 \001(\t\022\031\n\021encryption_status\030\r \001(\007\022\022\n" +
      "\nbp_version\030\016 \001(\t\"\327\001\n\021DeviceInfoCommand\022" +
      "\021\n\tuser_data\030\001 \001(\014\022#\n\013apn_context\030\002 \001(\0132" +
      "\016.DeviceInfoapn\022\020\n\010data_url\030\003 \001(\t\022\032\n\022Res" +
      "onant_frequency\030\004 \001(\007\022\022\n\napp_qr_url\030\005 \001(" +
      "\t\022\020\n\010ble_name\030\006 \001(\t\022\027\n\017Other_info_data\030\007" +
      " \001(\014\022\035\n\025DeviceI_remaining_sum\030\010 \001(\007\"p\n\021D" +
      "eviceInfoRequest\022\020\n\010reserved\030\001 \001(\007\022$\n\top" +
      "eration\030\002 \002(\0162\021.DevInfoOperation\022#\n\007devi" +
      "nfo\030\003 \001(\0132\022.DeviceInfoCommand*v\n\013DevInfo" +
      "Fota\022\007\n\003NON\020\000\022\n\n\006CC2540\020\001\022\t\n\005NRF51\020\002\022\013\n\007" +
      "DA1468X\020\003\022\n\n\006MT2523\020\004\022\r\n\tNRF52_BLE\020\005\022\016\n\n" +
      "GH551X_BLE\020\006\022\017\n\013ATS3085_BLE\020\007*\'\n\020DevInfo" +
      "Operation\022\010\n\004Read\020\000\022\t\n\005Write\020\001B\tZ\007./iwow" +
      "n"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_DevInfoManu_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_DevInfoManu_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_DevInfoManu_descriptor,
        new String[] { "Date", "Factory", });
    internal_static_DeviceInfoapn_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_DeviceInfoapn_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_DeviceInfoapn_descriptor,
        new String[] { "Mcc", "Mnc", "SettingName", "AuthType", "RoamingProtocol", "ApnStr", "UserName", "Password", });
    internal_static_DeviceInfoResponse_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_DeviceInfoResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_DeviceInfoResponse_descriptor,
        new String[] { "Model", "Version", "Mac", "Fota", "Manu", "UserData", "PbVersion", "CtpCs", "ProgramAddr", "ResourceAddr", "ApnContext", "BleName", "EncryptionStatus", "BpVersion", });
    internal_static_DeviceInfoCommand_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_DeviceInfoCommand_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_DeviceInfoCommand_descriptor,
        new String[] { "UserData", "ApnContext", "DataUrl", "ResonantFrequency", "AppQrUrl", "BleName", "OtherInfoData", "DeviceIRemainingSum", });
    internal_static_DeviceInfoRequest_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_DeviceInfoRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_DeviceInfoRequest_descriptor,
        new String[] { "Reserved", "Operation", "Devinfo", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
